Sök…


Valuta

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

Lägga till översättning till din Android-app

Du måste skapa en annan strings.xml fil för varje nytt språk.

  1. Högerklicka på res- mappen
  2. Välj NyVärderingsresursfil
  3. Välj en plats från tillgängliga kval
  4. Klicka på knappen Nästa (>>)
  5. Välj ett språk
  6. Namnge filen 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>

Ställa in språket programmatiskt:

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

Funktionen ovan kommer att ändra textfält som hänvisas till från strängar.xml . Antag till exempel att du har följande två textvyer:

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

Sedan, efter att ha ändrat landets språk, kommer språksträngarna med ID: s app_name och hello att ändras i enlighet därmed.

Typ av resurskataloger under mappen "res"

När lokalisering av olika typer av resurser krävs, som var och en har sitt eget hem i androidprojektstrukturen. Följande är de olika katalogerna som vi kan placera under \res katalogen. Resurstyperna som placeras i vart och ett av dessa kataloger förklaras i tabellen nedan:

Directory Resurstyp
animatör / XML-filer som definierar egendomanimationer.
anim / XML-filer som definierar mellan animationer. (Egenskapsanimationer kan också sparas i den här katalogen, men animatorn / katalogen föredras för egendomanimationer för att skilja mellan de två typerna.)
Färg/ XML-filer som definierar en tillståndslista med färger. Se Resurs för färgtillståndslista
drawable / "Bitmapfiler (.png, .9.png, .jpg, .gif) eller XML-filer som är sammanställda i följande ritbara undertyper:: Bitmapfiler Bitmap files - Nine-Patches (re-sizable bitmaps) - State lists - Shapes - Animation drawables - Other drawables - "
mipmap / Rita filer för olika täthetsknappar för ikoner. Mer information om hur du hanterar start-ikoner med mipmap / mappar finns i Hantera projektöversikt.
layout/ XML-filer som definierar en användargränssnittslayout. Se layoutresurs.
meny/ XML-filer som definierar applikationsmenyer, till exempel en alternativmeny, snabbmeny eller undermeny. Se menyresurs.
rå/ Godtyckliga filer att spara i sin råa form. För att öppna dessa resurser med en rå InputStream, ring Resources.openRawResource () med resurs-ID, som är R.raw.filename.
Men om du behöver tillgång till ursprungliga filnamn och filhierarki, kan du överväga att spara en del resurser i tillgångarna / katalogen (istället förres / raw /). Filer i tillgångar / får inte ett resurs-ID, så du kan bara läsa dem med hjälp av AssetManager.
värden / XML-filer som innehåller enkla värden, till exempel strängar, heltal och färger, samt stilar och teman
xml / Godtyckliga XML-filer som kan läsas vid körning genom att ringa Resources.getXML (). Olika XML-konfigurationsfiler måste sparas här, till exempel en sökbar konfiguration.

Konfigurationstyper och kvalificeringsnamn för varje mapp under "res" -katalogen

Varje resurskatalog under res mappen (listad i exemplet ovan) kan ha olika varianter av de innehållade resurserna i liknande namngivna katalog tillägg med olika qualifier-values för varje configuration-type .

Exempel på varianter av `` katalog med olika kvalificeringsvärden tillagda som ofta ses i våra Android-projekt:

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

Uttömmande lista över alla olika konfigurationstyper och deras kvalificeringsvärden för Android-resurser:

Konfiguration Kvalificeringsvärden
MCC och MNC Exempel:
mcc310
mcc310-mnc004
mcc208-mnc00
etc.
Språk och region Exempel:
sv
fr
en-rus
FR-rfr
FR-rCA
Layoutriktning ldrtl
ldltr
smallestWidth swdp
Exempel:
sw320dp
sw600dp
sw720dp
Tillgänglig bredd wdp
w720dp
w1024dp
Tillgänglig höjd hdp
h720dp
h1024dp
Skärmstorlek små
vanligt
stor
extra stor
Skärm aspekt lång
inte länge
Rund skärm runda
notround
Skärmorientering hamn
landa
UI-läge bil
skrivbord
tv
appliancewatch
Nattläge natt
notnight
Skärmens pixeldensitet (dpi) ldpi
MDPI
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
Typ av pekskärm inte röra
finger
Tangentbordets tillgänglighet keysexposed
keyshidden
keyssoft
Primär textinmatningsmetod nokeys
qwerty
12key
Navigationsnyckel tillgänglighet navexposed
navhidden
Primär navigationsmetod utan beröring nonav
dpad
styrkula
hjul
Platformversion (API-nivå) Exempel:
v3
v4
v7

Ändra programmets Android-applikation

I exemplen ovan förstår du hur du lokaliserar applikationsresurser. Följande exempel förklarar hur du ändrar applikationsinställningen inom applikationen, inte från enheten. För att endast ändra applikationsinställning kan du använda användningsområden nedan.

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

Initiera den språk som användaren föredrog från programklass.

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

Du måste också skapa en basaktivitet och utöka denna aktivitet till all annan aktivitet så att du bara kan ändra tillämpningsområdet endast en plats enligt följande:

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

}

Obs: Initiera alltid språk i konstruktören.

Nu kan du använda LocalizationActivity enligt följande.

public class MainActivity extends LocalizationActivity {

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

    }
}

Obs: När du ändrar programmens språk måste du starta om din aktivitet för att få effekten av landskapsändring För att fungera ordentligt för den här lösningen kan du och använda språk från delade inställningar vid appstart: android:name=".LocaleApp" i du Manifest.xml.

Ibland uppmanar lintkontrollen att skapa utgåvan. För att lösa sådana problem följer alternativen nedan.

Först:

Om du bara vill inaktivera översättning för vissa strängar lägger du till följande attribut till standard string.xml

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

Andra:

Ignorera all saknad översättning från resursfil lägg till följande attribut Det är ignorera attributet för verktygets namnutrymme i din strängfil, enligt följande:

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

Tredje:

Ett annat sätt att inaktivera sträng som inte kan översättas

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

Om du har många resurser som inte bör översättas kan du placera dem i en fil med namnet donottranslate.xml och lint kommer att betrakta alla resurser som inte kan översättas.

Fjärde:

Du kan också lägga till språk i resursfilen

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

Du kan också inaktivera saknad översättningskontroll för ludd från app / build.gradle

lintOptions {
        
        disable 'MissingTranslation'
    }


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow