Suche…


Währung

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

Hinzufügen von Übersetzungen zu Ihrer Android-App

Sie müssen für jede neue Sprache eine andere Datei " strings.xml erstellen.

  1. Klicken Sie mit der rechten Maustaste auf den Ordner res
  2. Wählen Sie NeuRessourcendatei Werte
  3. Wählen Sie aus den verfügbaren Qualifikationsmerkmalen ein Gebietsschema aus
  4. Klicken Sie auf die Schaltfläche Weiter (>>)
  5. Wähle eine Sprache
  6. Benennen Sie die Datei 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>

Sprache programmgesteuert einstellen:

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

Die obige Funktion ändert die Textfelder, auf die in strings.xml verwiesen wird. Angenommen, Sie haben die folgenden zwei Textansichten:

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

Nach dem Ändern des Gebietsschemas werden die Sprachzeichenfolgen mit den IDs app_name und hello entsprechend geändert.

Typ der Ressourcenverzeichnisse unter dem Ordner "res"

Bei der Lokalisierung sind verschiedene Arten von Ressourcen erforderlich, von denen jede in der Android-Projektstruktur eine eigene Heimat hat. Nachfolgend sind die verschiedenen Verzeichnisse aufgeführt, die wir im Verzeichnis \res ablegen können. Die in jedem dieser Verzeichnisse platzierten Ressourcentypen werden in der folgenden Tabelle erläutert:

Verzeichnis Ressourcentyp
Animator/ XML-Dateien, die Eigenschaftsanimationen definieren.
anim / XML-Dateien, die Tween-Animationen definieren. (Eigenschaftsanimationen können auch in diesem Verzeichnis gespeichert werden. Das Animator / -Verzeichnis wird jedoch für Eigenschaftsanimationen bevorzugt, um zwischen den beiden Typen zu unterscheiden.)
Farbe/ XML-Dateien, die eine Zustandsliste von Farben definieren. Siehe Farbzustandslistenressource
zeichnend / „Bitmap - Dateien (.png, .9.png, JPG, GIF) oder XML - Dateien , die in die folgenden ziehbar Ressource Subtypen kompiliert werden: Bitmap files - Nine-Patches (re-sizable bitmaps) - State lists - Shapes - Animation drawables - Other drawables - " - Bitmap files - Nine-Patches (re-sizable bitmaps) - State lists - Shapes - Animation drawables - Other drawables - "
Mipmap / Zeichnungsfähige Dateien für unterschiedliche Symbol-Startsymbole. Weitere Informationen zum Verwalten von Startersymbolen mit Mipmap / Ordnern finden Sie unter Verwalten von Projekten - Übersicht.
Layout/ XML-Dateien, die ein Benutzeroberflächenlayout definieren. Siehe Layoutressource.
Speisekarte/ XML-Dateien, die Anwendungsmenüs definieren, z. B. ein Optionsmenü, ein Kontextmenü oder ein Untermenü. Siehe Menüressource.
roh/ Beliebige Dateien, die in ihrer Rohform gespeichert werden sollen. Um diese Ressourcen mit einem rohen InputStream zu öffnen, rufen Sie Resources.openRawResource () mit der Ressourcen-ID auf. Dies ist R.raw.filename.
Wenn Sie jedoch auf die ursprünglichen Dateinamen und die Dateiehierarchie zugreifen müssen, sollten Sie möglicherweise einige Ressourcen im Verzeichnis assets / speichern (statt ofres / raw /). Dateien in Assets / erhalten keine Ressourcen-ID. Sie können sie daher nur mit AssetManager lesen.
Werte/ XML-Dateien, die einfache Werte enthalten, z. B. Zeichenfolgen, Ganzzahlen und Farben sowie Stile und Designs
xml / Beliebige XML-Dateien, die zur Laufzeit durch Aufrufen von Resources.getXML () gelesen werden können. Hier müssen verschiedene XML-Konfigurationsdateien gespeichert werden, beispielsweise eine durchsuchbare Konfiguration.

Konfigurationstypen und Qualifikationsnamen für jeden Ordner im Verzeichnis "res"

Für jedes Ressourcenverzeichnis unter dem Ordner res (in dem obigen Beispiel aufgeführt) können verschiedene Variationen der enthaltenen Ressourcen in einem gleichnamigen Verzeichnis mit Suffix und unterschiedlichen qualifier-values für jeden configuration-type .

Beispiel für Variationen von `` Verzeichnis mit unterschiedlichen Qualifier-Werten, die häufig in unseren Android-Projekten angezeigt werden:

  • zeichnend /
  • drawable-de /
  • Zeichenbar-fr-rCA /
  • drawable-de-port /
  • drawable-en-notouch-12key /
  • drawable-port-ldpi /
  • drawable-port-notouch-12key /

Vollständige Liste aller verschiedenen Konfigurationstypen und ihrer Qualifiziererwerte für Android-Ressourcen:

Aufbau Qualifikationswerte
MCC und MNC Beispiele:
mcc310
mcc310-mnc004
mcc208-mnc00
usw.
Sprache und Region Beispiele:
en
fr
en-rUS
fr-rFR
fr-rCA
Layoutrichtung ldrtl
ldltr
kleinsteWeite swdp
Beispiele:
sw320dp
sw600dp
sw720dp
Verfügbare Breite wdp
w720dp
w1024dp
Verfügbare Höhe HDP
h720dp
h1024dp
Bildschirmgröße klein
normal
groß
xgroß
Bildschirmaspekt lange
nicht lange
Runder Bildschirm runden
nicht rund
Bildschirmausrichtung Hafen
Land
UI-Modus Auto
Schreibtisch
Fernsehen
Geräteuhr
Nacht-Modus Nacht-
nicht Nacht
Bildschirmpixeldichte (dpi) ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
Touchscreen-Typ Keine Berührung
Finger
Verfügbarkeit der Tastatur keysexposed
keyshidden
keyssoft
Primäre Texteingabemethode nokeys
QWERTY
12key
Verfügbarkeit der Navigationstasten Kirchenschiff ausgesetzt
navhidden
Primäre berührungslose Navigationsmethode nonav
dpad
Trackball
Rad
Plattformversion (API-Ebene) Beispiele:
v3
v4
v7

Ändern Sie das Gebietsschema der Android-Anwendung programmgesteuert

In den obigen Beispielen erfahren Sie, wie Sie Anwendungsressourcen lokalisieren. Im folgenden Beispiel wird erläutert, wie das Anwendungsgebietsschema in der Anwendung und nicht vom Gerät aus geändert wird. Um nur das Anwendungsgebietsschema zu ändern, können Sie das Gebietsschema util verwenden.

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

Initialisieren Sie das von Ihnen bevorzugte Gebietsschema aus der Anwendungsklasse.

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

Sie müssen auch eine Basisaktivität erstellen und diese Aktivität auf alle anderen Aktivitäten ausdehnen, sodass Sie das Gebietsschema der Anwendung nur an einer Stelle wie folgt ändern können:

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

}

Anmerkung: Initialisieren Sie das Gebietsschema immer im Konstruktor.

Jetzt können Sie LocalizationActivity wie folgt verwenden.

public class MainActivity extends LocalizationActivity {

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

    }
}

Hinweis: Wenn Sie locale Anwendungs programmatisch zu ändern, müssen Sie Ihre Aktivitäten neu zu starten , um den Effekt von locale Änderung zu ergreifen , um richtig für diese Lösung , Sie und die Verwendung locale von gemeinsamen Präferenzen auf app Startup zu arbeiten android:name=".LocaleApp" In Sie Manifest.xml.

Manchmal werden Sie aufgefordert, den Release-Build zu erstellen. Um dieses Problem zu lösen, folgen Sie den nachstehenden Optionen.

Zuerst:

Wenn Sie die Übersetzung nur für einige Zeichenfolgen deaktivieren möchten, fügen Sie das folgende Attribut zu der Standardzeichenfolge string.xml hinzu

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

Zweite:

Ignoriere alle fehlenden Übersetzungen aus der Ressourcendatei. Füge folgendes Attribut hinzu. Es ist das Ignore-Attribut des Namespaces der Tools in deiner Strings-Datei:

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

Dritte:

Eine andere Möglichkeit, nicht übersetzbare Zeichenfolgen zu deaktivieren

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

Wenn Sie über viele Ressourcen verfügen, die nicht übersetzt werden sollten, können Sie sie in einer Datei namens donottranslate.xml platzieren, und lint berücksichtigt alle nicht übersetzbaren Ressourcen.

Vierte:

Sie können auch ein Gebietsschema in der Ressourcendatei hinzufügen

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

Sie können auch die fehlende Übersetzungsprüfung für fusseln in app / build.gradle deaktivieren

lintOptions {
        
        disable 'MissingTranslation'
    }


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow