Recherche…


Devise

Currency currency = Currency.getInstance("USD");
NumberFormat format = NumberFormat.getCurrencyInstance();
format.setCurrency(currency);
format.format(10.00);

Ajout de la traduction sur votre application Android

Vous devez créer un strings.xml différent pour chaque nouvelle langue.

  1. Cliquez avec le bouton droit sur le dossier res
  2. Choisissez NouveauFichier de ressources Valeurs
  3. Sélectionnez un paramètre régional parmi les qualificateurs disponibles
  4. Cliquez sur le bouton Suivant (>>)
  5. Sélectionnez une langue
  6. Nommez le fichier strings.xml

strings.xml

<resources>
    <string name="app_name">Testing Application</string>
    <string name="hello">Hello World</string>
</resources>

strings.xml (salut)

<resources>
    <string name="app_name">परीक्षण आवेदन</string>
    <string name="hello">नमस्ते दुनिया</string>
</resources>

Définir la langue par programmation:

public void setLocale(String locale) // Pass "en","hi", etc.
{
    myLocale = new Locale(locale);
    // Saving selected locale to session - SharedPreferences.
    saveLocale(locale);
    // Changing locale.
    Locale.setDefault(myLocale);
    android.content.res.Configuration config = new android.content.res.Configuration();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        config.setLocale(myLocale);
    } else {
        config.locale = myLocale;
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        getBaseContext().createConfigurationContext(config);
    } else {
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    }
}

La fonction ci-dessus modifiera les champs de texte référencés depuis strings.xml . Par exemple, supposons que vous ayez les deux vues de texte suivantes:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="@string/app_name"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="@string/hello"/>

Ensuite, après avoir modifié les paramètres régionaux, les chaînes de langue ayant les identifiants app_name et hello seront modifiées en conséquence.

Type de répertoires de ressources sous le dossier "res"

Lors de la localisation de différents types de ressources sont nécessaires, chacun ayant sa propre maison dans la structure du projet Android. Voici les différents répertoires que nous pouvons placer sous le répertoire \res . Les types de ressources placés dans chacun de ces répertoires sont expliqués dans le tableau ci-dessous:

Annuaire Type de ressource
animateur/ Fichiers XML définissant des animations de propriétés.
anim / Fichiers XML définissant les animations Tween. (Les animations de propriétés peuvent également être enregistrées dans ce répertoire, mais l'animateur / répertoire est préférable pour les animations de propriétés afin de distinguer les deux types.)
Couleur/ Fichiers XML définissant une liste d'états de couleurs. Voir la liste des états des couleurs
dessinable / "Fichiers bitmap (.png, .9.png, .jpg, .gif) ou fichiers XML compilés dans les sous-types de ressources pouvant être dessinés suivants: Bitmap files - Nine-Patches (re-sizable bitmaps) - State lists - Shapes - Animation drawables - Other drawables - "
mipmap / Fichiers pouvant être dessinés pour différentes densités d'icône de lanceur. Pour plus d'informations sur la gestion des icônes de lanceur avec mipmap / dossiers, voir Gestion de la vue d'ensemble des projets.
disposition/ Fichiers XML définissant une interface utilisateur. Voir Ressource de mise en page.
menu/ Fichiers XML qui définissent des menus d'application, tels qu'un menu d'options, un menu contextuel ou un sous-menu. Voir la ressource de menu.
brut/ Fichiers arbitraires à enregistrer sous leur forme brute. Pour ouvrir ces ressources avec un InputStream brut, appelez Resources.openRawResource () avec l'ID de ressource, à savoir R.raw.filename.
Cependant, si vous avez besoin d'accéder aux noms de fichiers d'origine et à la hiérarchie de fichiers, vous pouvez envisager de sauvegarder certaines ressources dans le répertoire assets / (au lieu deres / raw /). Les fichiers contenus dans assets / ne reçoivent pas d'ID de ressource, vous pouvez donc les lire uniquement à l'aide de AssetManager.
valeurs/ Fichiers XML contenant des valeurs simples, telles que des chaînes, des entiers et des couleurs, ainsi que des styles et des thèmes
xml / Fichiers XML arbitraires pouvant être lus lors de l'exécution en appelant Resources.getXML (). Différents fichiers de configuration XML doivent être enregistrés ici, par exemple une configuration interrogeable.

Types de configuration et noms de qualificateur pour chaque dossier sous le répertoire "res"

Chaque répertoire de ressources sous le dossier res (répertorié dans l'exemple ci-dessus) peut avoir différentes variantes des ressources contenues dans un répertoire portant le même nom, avec des qualifier-values de qualifier-values différentes pour chaque configuration-type .

Exemple de variantes de répertoire avec différentes valeurs de qualificatif suffixées que l'on voit souvent dans nos projets Android:

  • dessinable /
  • drawable-fr /
  • drawable-fr-rCA /
  • drawable-en-port /
  • drawable-en-notouch-12key /
  • drawable-port-ldpi /
  • drawable-port-notouch-12key /

Liste exhaustive de tous les différents types de configuration et de leurs valeurs de qualificatif pour les ressources Android:

Configuration Valeurs de qualification
MCC et MNC Exemples:
mcc310
mcc310-mnc004
mcc208-mcc00
etc.
Langue et région Exemples:
en
fr
en-rUS
fr-rFR
fr-rCA
Direction de la mise en page ldrtl
ldltr
plus petite largeur swdp
Exemples:
sw320dp
sw600dp
sw720dp
Largeur disponible wdp
w720dp
w1024dp
Hauteur disponible HDP
h720dp
h1024dp
Taille de l'écran petit
Ordinaire
grand
xlarge
Aspect de l'écran longue
pas longtemps
Écran rond rond
pas du tout
Orientation de l'écran Port
terre
Mode interface utilisateur voiture
bureau
télévision
appliancewatch
Mode nuit nuit
nuit
Densité des pixels de l'écran (dpi) ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
Type d'écran tactile pas touche
doigt
Disponibilité du clavier keysexposed
keyhidden
clés
Méthode de saisie de texte primaire nokeys
qwerty
12key
Disponibilité des clés de navigation navexposed
navhidden
Méthode de navigation principale non tactile nonav
dpad
boule de commande
roue
Version de plate-forme (niveau API) Exemples:
v3
v4
v7

Changer la locale de l'application Android par programmation

Dans les exemples ci-dessus, vous comprenez comment localiser les ressources de l'application. L'exemple suivant explique comment modifier les paramètres régionaux de l'application dans l'application, et non à partir du périphérique. Pour modifier uniquement les paramètres régionaux de l'application, vous pouvez utiliser ci-dessous des paramètres régionaux.

import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.preference.PreferenceManager;
import android.view.ContextThemeWrapper;

import java.util.Locale;

/**
 * Created by Umesh on 10/10/16.
 */
public class LocaleUtils {

    private static Locale mLocale;

    public static void setLocale(Locale locale){
        mLocale = locale;
        if(mLocale != null){
            Locale.setDefault(mLocale);
        }
    }

    public static void updateConfiguration(ContextThemeWrapper wrapper){
        if(mLocale != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
            Configuration configuration = new Configuration();
            configuration.setLocale(mLocale);
            wrapper.applyOverrideConfiguration(configuration);
        }
    }

    public static void updateConfiguration(Application application, Configuration configuration){
        if(mLocale != null && Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1){
            Configuration config = new Configuration(configuration);
            config.locale = mLocale;
            Resources res = application.getBaseContext().getResources();
            res.updateConfiguration(configuration, res.getDisplayMetrics());
        }
    }

    public static void updateConfiguration(Context context, String language, String country){
        Locale locale = new Locale(language,country);
        setLocale(locale);
        if(mLocale != null){
            Resources res = context.getResources();
            Configuration configuration = res.getConfiguration();
            configuration.locale = mLocale;
            res.updateConfiguration(configuration,res.getDisplayMetrics());
        }
    }




    public static String getPrefLangCode(Context context) {
        return PreferenceManager.getDefaultSharedPreferences(context).getString("lang_code","en");
    }

    public static void setPrefLangCode(Context context, String mPrefLangCode) {

        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();
        editor.putString("lang_code",mPrefLangCode);
        editor.commit();
    }

    public static  String getPrefCountryCode(Context context) {
        return PreferenceManager.getDefaultSharedPreferences(context).getString("country_code","US");
    }

    public static void setPrefCountryCode(Context context,String mPrefCountryCode) {

        SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit();
        editor.putString("country_code",mPrefCountryCode);
        editor.commit();
    }
}

Initialiser les paramètres régionaux de préférence par l'utilisateur, à partir de la classe Application.

public class LocaleApp extends Application{

    @Override
    public void onCreate() {
        super.onCreate();

        LocaleUtils.setLocale(new Locale(LocaleUtils.getPrefLangCode(this), LocaleUtils.getPrefCountryCode(this)));
        LocaleUtils.updateConfiguration(this, getResources().getConfiguration());
    }
}

Vous devez également créer une activité de base et étendre cette activité à toute autre activité afin de pouvoir modifier les paramètres régionaux de l'application d'un seul endroit, comme suit:

public abstract class LocalizationActivity extends AppCompatActivity {

    public LocalizationActivity() {
        LocaleUtils.updateConfiguration(this);
    }

    // We only override onCreate
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

}

Remarque: Toujours initialiser les paramètres régionaux dans le constructeur.

Maintenant, vous pouvez utiliser LocalizationActivity comme suit.

public class MainActivity extends LocalizationActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
}

Remarque: Lorsque vous modifiez les paramètres régionaux de l'application par programmation, vous devez redémarrer votre activité pour modifier les paramètres régionaux. Pour fonctionner correctement avec cette solution, vous pouvez utiliser les paramètres régionaux des préférences partagées au démarrage de l'application android:name=".LocaleApp" in vous Manifest.xml.

Parfois, invite du vérificateur de peluches à créer la version de publication. Pour résoudre ce problème, suivez les options ci-dessous.

Premier:

Si vous souhaitez désactiver la traduction pour certaines chaînes uniquement, ajoutez l'attribut suivant à la chaîne par défaut string.xml

<string name="developer" translatable="false">Developer Name</string>

Seconde:

Ignorez toutes les traductions manquantes à partir de l'attribut d'ajout de fichier de ressources L'attribut ignore de l'espace de noms des outils dans votre fichier de chaînes, comme suit:

<?xml version="1.0" encoding="utf-8"?>
<resources
  xmlns:tools="http://schemas.android.com/tools"
  tools:ignore="MissingTranslation" >
http://stackoverflow.com/documentation/android/3345/localization-with-resources-in-android#
  <!-- your strings here; no need now for the translatable attribute -->

</resources>

Troisième:

Une autre façon de désactiver la chaîne non traduisible

http://tools.android.com/recent/non-translatablestrings

Si vous avez beaucoup de ressources qui ne doivent pas être traduites, vous pouvez les placer dans un fichier nommé donottranslate.xml et lint prendra en compte toutes les ressources non traduisibles.

Quatrième:

Vous pouvez également ajouter des paramètres régionaux dans le fichier de ressources

<resources
xmlns:tools="http://schemas.android.com/tools"
    tools:locale="en" tools:ignore="MissingTranslation">

Vous pouvez également désactiver le contrôle de traduction manquant pour les peluches depuis app / build.gradle

lintOptions {
        
        disable 'MissingTranslation'
    }


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow