Je suis nouveau dans java et je développe actuellement une application de jeu et je voulais ajouter une fonctionnalité qui pourrait changer les langues du jeu.

J'ai déjà fait 2 strings.xml. L'un est la version par défaut (anglais), l'autre est la version traduite (fichier)

enter image description here

Voici mon code

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class LanguageActivity extends Activity {
  private static Button button_fil;
  private static Button button_eng;

  public void onButtonClickListener() {
    button_fil = (Button) findViewById(R.id.btnFilipino);
    button_fil.setOnClickListener(
      new View.OnClickListener() {@
        Override
        public void onClick(View v) {
          Toast.makeText(LanguageActivity.this, "Filipino Language", Toast.LENGTH_SHORT).show();
        }
      }
    );

    button_eng = (Button) findViewById(R.id.btnEnglish);
    button_eng.setOnClickListener(
      new View.OnClickListener() {@
        Override
        public void onClick(View v) {
          Toast.makeText(LanguageActivity.this, "English Language", Toast.LENGTH_SHORT).show();
        }
      }
    );

  }


  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.language);
    onButtonClickListener();

  }

Merci beaucoup!

9
kcNeko 3 janv. 2016 à 06:59

5 réponses

Meilleure réponse

Essayez cet exemple s'il vous plaît. Peut-être que cela vous aidera. Ici, j'ai utilisé un spinner pour sélectionner la langue.

Dans votre activité

import java.util.Locale;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;

public class AndroidLocalize extends Activity {
    Spinner spinnerctrl;
    Button btn;
    Locale myLocale;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        spinnerctrl = (Spinner) findViewById(R.id.spinner1);
        spinnerctrl.setOnItemSelectedListener(new OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view,
                    int pos, long id) {

                if (pos == 1) {

                    Toast.makeText(parent.getContext(),
                            "You have selected Tamil", Toast.LENGTH_SHORT)
                            .show();
                    setLocale("ta");
                } else if (pos == 2) {

                    Toast.makeText(parent.getContext(),
                            "You have selected Hindi", Toast.LENGTH_SHORT)
                            .show();
                    setLocale("hi");
                } else if (pos == 3) {

                    Toast.makeText(parent.getContext(),
                            "You have selected English", Toast.LENGTH_SHORT)
                            .show();
                    setLocale("en");
                }

            }

            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
            }

        });
    }

    public void setLocale(String lang) {

        myLocale = new Locale(lang);
        Resources res = getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        conf.locale = myLocale;
        res.updateConfiguration(conf, dm);
        Intent refresh = new Intent(this, AndroidLocalize.class);
        startActivity(refresh);
    }
}

Dans votre XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/greet"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/greet"
        android:textSize="25sp" android:gravity="center" android:paddingTop="25sp" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/langselection"
        android:textAppearance="?android:attr/textAppearanceMedium" android:gravity="center" android:paddingTop="25sp"/>


 <Spinner
        android:id="@+id/spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/languages"
       android:gravity="center" android:paddingTop="25sp" />

</LinearLayout>

Et créez des dossiers dans votre res comme

Puis ajoutez strings.xml pour votre langue comme

<resources>

    <string name="app_name">Androidlocalization</string>
    <string name="hello_world">Hello world!</string>
    <string name="title_activity_android_localize">AndroidLocalize</string>
    <string name="greet">बधाई सचिन !!</string>
    <string name="langselection">जिस भाषा में आप सचिन को नमस्कार करना चाहते हैं का चयन करें!!!!</string>
    <string name="chooselang">Choose the language</string>
      <string-array name="languages">
        <item>Select language</item>
        <item>தமிழ்</item>
        <item>हिंदी</item>
        <item>English</item>
    </string-array>

</resources>

Veuillez également mettre à jour votre manifeste, j'espère que cela résoudra votre problème.

Mettre à jour comme ça.

 <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".AndroidLocalize"
                android:label="@string/title_activity_android_localize" 
android:configChanges="locale|orientation|keyboardHidden" 
android:noHistory="true">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
14
Mr Robot 3 janv. 2016 à 05:41

C'est une méthode que j'ai écrite et qui fonctionne parfaitement pour moi pour changer la langue de l'application (et JUSTE POUR UNE SEULE APP - pas de l'appareil entier) :

private void setLanguageForApp(String languageToLoad){
    Locale locale;
    if(languageToLoad.equals("not-set")){ //use any value for default
        locale = Locale.getDefault();
    }
    else {
        locale = new Locale(languageToLoad);
    }
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config,
            getBaseContext().getResources().getDisplayMetrics());
}

REMARQUE: Appelez cette méthode avant le setContentView() de la première activité onCreate() chaque fois que l'application est ouverte.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setLanguageForApp("en"); //hard-coded here - get from whereever you stored
    setContentView(R.layout.activity_category_list);
    ...
    ...
    ...

Stockez le code de paramètres régionaux sélectionné dans les préférences partagées et récupérez-le pour le transmettre en tant que paramètre.

Méthode de dialogue de sélection de la langue: (Remarque: il recharge l'application après le changement de langue pour que le changement de langue soit effectif)

private void showLanguageChangePopup() {
    CharSequence languages[] = new CharSequence[] {
            "English",
            "हिंदी (Hindi)",
            "Français (French)",
            "Italiano (Italian)",
            "Deutsch (German)",
            "Español (Spanish)",
            "日本語 (Japanese)",
            "한국어 (Korean)",
            "Nederlands (Dutch)",
            "Português (Portuguese)",
            "руÑÑкий (Russian)",
            "中文 (Chinese)",
            "العربية (Arabic)"
    };
    final String codes[] = new String[] {
            "en",
            "hi",
            "fr",
            "it",
            "de",
            "es",
            "ja",
            "ko",
            "nl",
            "pt",
            "ru",
            "zh",
            "ar"
    };

    int currentLangIndex = Prefs.getUserPreferenceIntValue(Prefs.Key.SELECTED_LANGUAGE_INDEX, getBaseContext());
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(R.string.text_select_language);
    builder.setSingleChoiceItems(languages, currentLangIndex, null);
    builder.setNegativeButton(R.string.text_translate_cancel, null);
    builder.setPositiveButton(R.string.action_change_language, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            int selectedIndex = ((AlertDialog) dialog).getListView().getCheckedItemPosition();
            Prefs.setUserPreferenceStringValue(Prefs.Key.LANGUAGE, codes[selectedIndex], getBaseContext());
            Prefs.setUserPreferenceIntValue(Prefs.Key.SELECTED_LANGUAGE_INDEX, selectedIndex, getBaseContext());
            Intent i = new Intent(CategoryListActivity.this, CategoryListActivity.class);
            startActivity(i);
            finish();

        }
    });

    builder.show();
}
4
AndroidMechanic - Viral Patel 3 janv. 2016 à 05:49
<resources>

    <string name="app_name">Androidlocalization</string>
    <string name="hello_world">Hello world!</string>
    <string name="title_activity_android_localize">AndroidLocalize</string>
    <string name="greet">बधाई सचिन !!</string>
    <string name="langselection">जिस भाषा में आप सचिन को नमस्कार करना चाहते हैं का चयन करें!!!!</string>
    <string name="chooselang">Choose the language</string>
      <string-array name="languages">
        <item>Select language</item>
        <item>தமிழ்</item>
        <item>हिंदी</item>
        <item>English</item>
    </string-array>

</resources>

Chaque code est dans le même dossier pour une langue différente ajouter un dossier de valeur différente

Par exemple, le dossier de valeur pour l'hindi entre dans value-hi

2
Vinayagam.D 3 janv. 2016 à 04:55

Lorsque vous prenez en charge plusieurs langues, vous devez créer un dossier de valeurs distinct comme values-fr par exemple et placer votre fichier stings.xml dans ce dossier. Devrait marcher. J'espère que cela t'aides!

2
Krishna 3 janv. 2016 à 04:40

Suivez toujours le didacticiel officiel

Ajoutez vos fichiers de chaîne ici.

Si vous n'en avez pas, créez le dossier values-fil dans le dossier MyProject / res.

enter image description here

Vérifiez ceci si vous souhaitez gérer les changements de langue du système téléphonique.

4
Community 23 mai 2017 à 12:17