Ricerca…


Moneta

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

Aggiunta di traduzione alla tua app Android

Devi creare un file strings.xml diverso per ogni nuova lingua.

  1. Fare clic con il tasto destro sulla cartella res
  2. Scegli NuovoFile delle risorse dei valori
  3. Seleziona una locale dai qualificatori disponibili
  4. Fare clic sul pulsante Avanti (>>)
  5. Seleziona una lingua
  6. Denominare il file strings.xml

strings.xml

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

strings.xml (hi)

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

Impostazione della lingua in modo programmatico:

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 funzione sopra cambierà i campi di testo a cui si fa riferimento da strings.xml . Ad esempio, supponi di avere le seguenti due visualizzazioni di testo:

<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"/>

Quindi, dopo aver modificato le app_name internazionali, le stringhe della lingua con gli ids app_name e hello verranno modificate di conseguenza.

Tipo di directory di risorse nella cartella "res"

Quando è necessario localizzare diversi tipi di risorse, ognuna delle quali ha la propria casa nella struttura del progetto Android. Di seguito sono riportate le diverse directory che possiamo inserire nella directory \res . I tipi di risorse inseriti in ciascuna di queste directory sono spiegati nella tabella seguente:

elenco Tipo di risorsa
animatore/ File XML che definiscono le animazioni delle proprietà.
Anim / File XML che definiscono le animazioni interpolate. (Le animazioni delle proprietà possono anche essere salvate in questa directory, ma la cartella animatore / è preferibile per le animazioni delle proprietà per distinguere tra i due tipi.)
colore/ File XML che definiscono una lista di stati di colori. Vedere la risorsa Elenco stato colore
drawable / "File bitmap (.png, .9.png, .jpg, .gif) o file XML che sono compilati nei seguenti sottotipi di risorse estraibili:: Bitmap files - Nine-Patches (re-sizable bitmaps) - State lists - Shapes - Animation drawables - Other drawables - "
mipmap / File disegnabili per diverse densità di icone di avvio. Per ulteriori informazioni sulla gestione delle icone di avvio con mipmap / cartelle, vedere Gestione dei progetti Panoramica.
disposizione/ File XML che definiscono un layout dell'interfaccia utente. Vedi la risorsa di layout.
menu/ File XML che definiscono i menu delle applicazioni, ad esempio un menu Opzioni, un menu contestuale o un sottomenu. Vedi la risorsa del menu.
crudo/ File arbitrari da salvare nella loro forma originale. Per aprire queste risorse con un InputStream non elaborato, chiamare Resources.openRawResource () con l'ID risorsa, che è R.raw.filename.
Tuttavia, se è necessario accedere ai nomi dei file e alla gerarchia dei file originali, è possibile prendere in considerazione il salvataggio di alcune risorse nella directory assets / (anziché inres / raw /). File nelle risorse / non viene fornito un ID risorsa, quindi è possibile leggerli solo tramite AssetManager.
valori/ File XML che contengono valori semplici, come stringhe, numeri interi e colori, nonché stili e temi
xml / File XML arbitrari che possono essere letti in fase di esecuzione chiamando Resources.getXML (). Qui è necessario salvare diversi file di configurazione XML, come una configurazione ricercabile.

Tipi di configurazione e nomi dei qualificatori per ciascuna cartella nella directory "res"

Ogni directory di risorse nella cartella res (elencata nell'esempio sopra) può avere diverse varianti delle risorse contenute in una directory con nome simile, con suffissi diversi qualifier-values per ogni configuration-type .

Esempio di variazioni della directory `` con diversi valori di qualificatore suffissi che sono spesso visti nei nostri progetti Android:

  • drawable /
  • drawable-it /
  • drawable-fr-RCA /
  • drawable-en-port /
  • drawable-en-NoTouch-12key /
  • drawable-port-ldpi /
  • drawable-port-NoTouch-12key /

Elenco esaustivo di tutti i diversi tipi di configurazione e dei loro valori di qualificatore per le risorse Android:

Configurazione Valori del Qualificatore
MCC e MNC Esempi:
mcc310
mcc310-mnc004
mcc208-mnc00
eccetera.
Lingua e regione Esempi:
it
fr
en-rus
fr-RFR
fr-rCA
Direzione del layout ldrtl
ldltr
smallestWidth swdp
Esempi:
sw320dp
sw600dp
sw720dp
Larghezza disponibile WDP
w720dp
w1024dp
Altezza disponibile hdp
h720dp
h1024dp
Dimensione dello schermo piccolo
normale
grande
XLarge
Aspetto dello schermo lungo
notlong
Schermo rotondo il giro
notround
Orientamento schermo porta
terra
Modalità dell'interfaccia utente auto
scrivania
televisione
ApplianceWatch
Modalità notturna notte
notnight
Densità pixel dello schermo (dpi) ldpi
MDPI
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
Tipo di touchscreen non toccare
dito
Disponibilità della tastiera keysexposed
keyshidden
keyssoft
Metodo di immissione del testo primario nokeys
QWERTY
12key
Disponibilità della chiave di navigazione navexposed
navhidden
Metodo di navigazione non tattile principale nonav
DPAD
trackball
ruota
Versione piattaforma (livello API) Esempi:
v3
v4
v7

Cambia la localizzazione dell'applicazione Android programmaticamente

Negli esempi precedenti capisci come localizzare le risorse dell'applicazione. L'esempio seguente spiega come modificare la locale dell'applicazione all'interno dell'applicazione, non dal dispositivo. Per modificare solo le impostazioni locali dell'applicazione, è possibile utilizzare l'utilità di localizzazione sottostante.

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();
    }
}

Inizializza le impostazioni locali preferite dall'utente, dalla 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());
    }
}

È inoltre necessario creare un'attività di base ed estendere questa attività a tutte le altre attività in modo che sia possibile modificare le impostazioni internazionali dell'applicazione solo in un punto come segue:

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);
    }

}

Nota: inizializzare sempre la locale nel costruttore.

Ora puoi usare LocalizationActivity come segue.

public class MainActivity extends LocalizationActivity {

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

    }
}

Nota: quando si modifica la localizzazione dell'applicazione a livello di programmazione, è necessario riavviare l'attività per ottenere l'effetto della modifica delle impostazioni locali Per poter funzionare correttamente per questa soluzione e utilizzare le android:name=".LocaleApp" locali dalle preferenze condivise all'avvio dell'app, android:name=".LocaleApp" in tu Manifest.xml.

A volte il programma di controllo Lint richiede di creare la build di rilascio. Per risolvere questo problema, segui le seguenti opzioni.

Primo:

Se si desidera disabilitare la conversione solo per alcune stringhe, quindi aggiungere il seguente attributo a default string.xml

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

Secondo:

Ignora tutta la traduzione mancante dal file di risorse aggiungi il seguente attributo È l'attributo ignore dello spazio dei nomi degli strumenti nel file delle stringhe, come segue:

<?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>

Terzo:

Un altro modo per disabilitare la stringa non traducibile

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

Se si dispone di molte risorse che non devono essere tradotte, è possibile inserirle in un file denominato donottranslate.xml e Lint considererà tutte le risorse non traducibili.

Il quarto:

È inoltre possibile aggiungere impostazioni internazionali nel file di risorse

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

Puoi anche disabilitare il controllo della traduzione mancante per lint da app / build.gradle

lintOptions {
        
        disable 'MissingTranslation'
    }


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow