Szukaj…


Waluta

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

Dodawanie tłumaczenia do aplikacji na Androida

Musisz utworzyć inny plik strings.xml dla każdego nowego języka.

  1. Kliknij prawym przyciskiem myszy folder res
  2. Wybierz NowyPlik zasobów wartości
  3. Wybierz ustawienia regionalne z dostępnych kwalifikatorów
  4. Kliknij przycisk Dalej (>>)
  5. Wybierz język
  6. Nazwij plik strings.xml

strings.xml

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

strings.xml (cześć)

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

Programowe ustawienie języka:

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

Powyższa funkcja zmieni pola tekstowe, do których istnieją odwołania z strings.xml . Załóżmy na przykład, że masz dwa następujące widoki tekstu:

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

Następnie, po zmianie ustawień regionalnych, łańcuchy językowe o identyfikatorach app_name i hello zostaną odpowiednio zmienione.

Typ katalogów zasobów w folderze „res”

Podczas lokalizowania wymagane są różne rodzaje zasobów, z których każdy ma swój dom w strukturze projektu Androida. Poniżej znajdują się różne katalogi, które możemy umieścić w katalogu \res . Typy zasobów umieszczone w każdym z tych katalogów są wyjaśnione w poniższej tabeli:

Informator Typ zasobu
animator/ Pliki XML, które definiują animacje właściwości.
anim / Pliki XML, które definiują animacje animacji. (Animacje właściwości można również zapisać w tym katalogu, ale katalog animator / jest preferowany, aby animacje właściwości rozróżniały oba typy).
kolor/ Pliki XML, które definiują listę stanów kolorów. Zobacz Zasób listy stanów kolorów
wysuwany / „Pliki bitmap (.png, .9.png, .jpg, .gif) lub pliki XML, które są kompilowane w następujące podtypy zasobów do rysowania:: Bitmap files - Nine-Patches (re-sizable bitmaps) - State lists - Shapes - Animation drawables - Other drawables - "
mipmap / Pliki do rysowania dla różnych gęstości ikon programu uruchamiającego. Aby uzyskać więcej informacji na temat zarządzania ikonami programu uruchamiającego za pomocą mipmap / folderów, zobacz Omówienie zarządzania projektami.
układ/ Pliki XML, które definiują układ interfejsu użytkownika. Zobacz Zasób układu.
menu/ Pliki XML, które definiują menu aplikacji, takie jak menu opcji, menu kontekstowe lub podmenu. Zobacz Zasób menu.
surowy/ Pliki arbitralne do zapisania w surowej formie. Aby otworzyć te zasoby za pomocą surowego InputStream, wywołaj Resources.openRawResource () z identyfikatorem zasobu, którym jest R.raw.filename.
Jeśli jednak potrzebujesz dostępu do oryginalnych nazw plików i hierarchii plików, możesz rozważyć zapisanie niektórych zasobów w katalogu resources / (zamiastresres / raw /). Pliki w zasobach / nie mają identyfikatora zasobu, więc można je odczytać tylko za pomocą AssetManager.
wartości / Pliki XML zawierające proste wartości, takie jak ciągi, liczby całkowite i kolory, a także style i motywy
xml / Dowolne pliki XML, które można odczytać w czasie wykonywania, wywołując Resources.getXML (). Należy zapisać tutaj różne pliki konfiguracyjne XML, takie jak konfigurowalna wyszukiwarka.

Typy konfiguracji i nazwy kwalifikatorów dla każdego folderu w katalogu „res”

Każdy katalog zasobów w folderze res (wymienionym w powyższym przykładzie) może mieć różne odmiany zawartych w nim zasobów w podobnie nazwanym katalogu z różnymi qualifier-values dla każdego typu configuration-type .

Przykład wariantów katalogu `` z różnymi przyrostkami wartości kwalifikatora, które są często widoczne w naszych projektach na Androida:

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

Wyczerpująca lista wszystkich różnych typów konfiguracji i ich wartości kwalifikujących dla zasobów Androida:

Konfiguracja Wartości kwalifikatora
MCC i MNC Przykłady:
mcc310
mcc310-mnc004
mcc208-mnc00
itp.
Język i region Przykłady:
en
fr
en-rUS
fr-rFR
fr-rCA
Układ strony ldrtl
ldltr
najmniejsza szerokość swdp
Przykłady:
sw320dp
sw600dp
sw720dp
Dostępna szerokość wdp
w720dp
w1024dp
Dostępna wysokość hdp
h720dp
h1024dp
Rozmiar ekranu mały
normalna
duży
xlarge
Aspekt ekranu długo
nie długo
Okrągły ekran okrągły
nie zaokrąglone
Orientacja ekranu Port
wylądować
Tryb interfejsu użytkownika samochód
biurko
telewizja
zegarek
Tryb nocny noc
noc
Gęstość pikseli ekranu (dpi) ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
Typ ekranu dotykowego nie dotykać
palec
Dostępność klawiatury klucz narażony
klucz ukryty
keyssoft
Podstawowa metoda wprowadzania tekstu nokeys
qwerty
12key
Dostępność klucza nawigacyjnego navexposed
ukryty
Podstawowa metoda nawigacji bezdotykowej nonav
dpad
trackball
koło
Wersja platformy (poziom API) Przykłady:
v3
v4
wersja 7

Programowo zmieniaj ustawienia regionalne aplikacji na Androida

W powyższych przykładach wiesz, jak zlokalizować zasoby aplikacji. Poniższy przykład wyjaśnia, jak zmienić ustawienia regionalne aplikacji w aplikacji, a nie z urządzenia. Aby zmienić tylko ustawienia regionalne aplikacji, możesz użyć poniższych ustawień regionalnych.

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

Zainicjuj ustawienia narodowe preferowane przez użytkownika z klasy 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());
    }
}

Musisz również utworzyć działanie podstawowe i rozszerzyć to działanie na wszystkie inne działania, aby zmienić ustawienia regionalne aplikacji tylko w jednym miejscu w następujący sposób:

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

}

Uwaga: Zawsze inicjuj ustawienia regionalne w Konstruktorze.

Teraz możesz użyć LocalizationActivity w następujący sposób.

public class MainActivity extends LocalizationActivity {

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

    }
}

Uwaga: Kiedy programowo zmieniasz ustawienia regionalne aplikacji, musisz ponownie uruchomić swoją aktywność, aby uzyskać efekt zmiany ustawień regionalnych. Aby działać poprawnie w tym rozwiązaniu, ty i używasz ustawień regionalnych ze wspólnych preferencji podczas uruchamiania aplikacji, android:name=".LocaleApp" w ty Manifest.xml.

Czasami Lint Checker wyświetla monit o utworzenie kompilacji wydania. Aby rozwiązać taki problem, wykonaj poniższe opcje.

Pierwszy:

Jeśli chcesz wyłączyć tłumaczenie tylko dla niektórych ciągów, dodaj następujący atrybut do domyślnego ciągu string.xml

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

Druga:

Zignoruj wszystkie brakujące tłumaczenia z pliku zasobów dodaj następujący atrybut Jest to atrybut ignorowania przestrzeni nazw narzędzi w pliku ciągów, w następujący sposób:

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

Trzeci:

Kolejny sposób na wyłączenie nieprzetłumaczalnego łańcucha

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

Jeśli masz wiele zasobów, których nie powinno się tłumaczyć, możesz umieścić je w pliku o nazwie donottranslate.xml, a lint uzna je za nieprzekształcalne.

Czwarty:

Możesz także dodać ustawienia regionalne w pliku zasobów

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

Możesz także wyłączyć sprawdzanie brakującego tłumaczenia dla linków z app / build.gradle

lintOptions {
        
        disable 'MissingTranslation'
    }


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow