Поиск…


валюта

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

Добавление перевода в приложение для Android

Вам нужно создать другой файл strings.xml для каждого нового языка.

  1. Щелкните правой кнопкой мыши папку res
  2. Выберите Новый файл ресурсовЗначения
  3. Выберите локаль из доступных квалификаторов
  4. Нажмите кнопку « Далее» (>>)
  5. Выберите язык
  6. Назовите файл strings.xml

strings.xml

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

strings.xml (привет)

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

Программирование программно:

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

Вышеуказанная функция изменит текстовые поля, на которые ссылаются строки strings.xml . Например, предположим, что у вас есть следующие два текстовых вида:

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

Затем, после изменения языкового стандарта, строки языка, имеющие идентификаторы app_name и hello будут соответственно изменены.

Тип каталогов ресурсов в папке «res»

Когда требуется локализация различных типов ресурсов, каждый из них имеет свой собственный дом в структуре проекта Android. Ниже приведены различные каталоги, которые мы можем разместить в каталоге \res . Типы ресурсов, размещенные в каждом из этих каталогов, описаны в следующей таблице:

каталог Тип ресурса
аниматор / XML-файлы, которые определяют анимацию свойств.
аним / XML-файлы, которые определяют анимацию анимации. (Имущественная анимация также может быть сохранена в этом каталоге, но каталог аниматора / предпочтительнее для анимации свойств, чтобы различать два типа.)
цвет/ XML-файлы, которые определяют список состояний цветов. См. Раздел «Список состояний цвета»
рисуем / «Растровые файлы (.png, .9.png, .jpg, .gif) или файлы XML, которые скомпилированы в следующие подтипы поддающихся ресурсам:: Bitmap files - Nine-Patches (re-sizable bitmaps) - State lists - Shapes - Animation drawables - Other drawables - "
мипмап / Файлы с возможностью рисования для различных значений плотности значков пусковых установок. Дополнительные сведения об управлении значками запуска с помощью mipmap / folders см. В разделе «Управление проектами».
макет / XML-файлы, которые определяют макет пользовательского интерфейса. См. «Ресурс компоновки».
меню/ XML-файлы, которые определяют меню приложений, например меню параметров, контекстное меню или подменю. См. «Ресурс меню».
сырье / Произвольные файлы для сохранения в исходном виде. Чтобы открыть эти ресурсы с помощью сырого InputStream, вызовите Resource.openRawResource () с идентификатором ресурса, который является R.raw.filename.
Однако, если вам нужен доступ к исходным именам файлов и иерархии файлов, вы можете рассмотреть возможность сохранения некоторых ресурсов в каталоге assets / resources (вместо ofres / raw /). Файлы в активах / не получают идентификатор ресурса, поэтому вы можете читать их только с помощью AssetManager.
ценности/ XML-файлы, содержащие простые значения, такие как строки, целые числа и цвета, а также стили и темы
XML / Произвольные XML-файлы, которые можно прочитать во время выполнения, вызывая Resource.getXML (). Здесь должны быть сохранены различные файлы конфигурации XML, такие как конфигурация, доступная для поиска.

Типы конфигурации и имена квалификаторов для каждой папки в каталоге «res»

Каждый каталог ресурсов в папке res (перечисленный в примере выше) может иметь разные варианты содержащихся ресурсов в каталоге с одинаковым именем, суффикс с различными qualifier-values для каждого configuration-type .

Пример вариаций `` каталог с разными значениями классификатора, которые часто встречаются в наших проектах для Android:

  • рисуем /
  • рисуем-ан /
  • вытяжка-FR-ПКА /
  • вытяжка-ен-порт /
  • вытяжка-ен-NoTouch-12key /
  • вытяжка-порт-ldpi /
  • вытяжка-порт-NoTouch-12key /

Исчерпывающий список всех разных типов конфигурации и их значений квалификатора для ресурсов android:

конфигурация Квалификационные значения
MCC и MNC Примеры:
mcc310
mcc310-mnc004
mcc208-mnc00
и т.п.
Язык и регион Примеры:
ан
фр
ан-РУСЬ
фр-RFR
фр-РКА
Направление макета ldrtl
ldltr
smallestWidth swdp
Примеры:
sw320dp
sw600dp
sw720dp
Доступная ширина WDP
w720dp
w1024dp
Доступная высота HDP
h720dp
h1024dp
Размер экрана маленький
нормальный
большой
XLarge
Аспект экрана долго
недолго
Круглый экран круглый
notround
Ориентация экрана порт
земельные участки
Режим пользовательского интерфейса автомобиль
стол письменный
телевидение
appliancewatch
Ночной режим ночь
notnight
Плотность пикселей экрана (dpi) ldpi
MDPI
ИПЧР
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
Тип сенсорного экрана без касаний
Палец
Доступность клавиатуры keysexposed
keyshidden
keyssoft
Метод первичного ввода текста nokeys
БУКВ
12key
Доступ к навигационной клавише navexposed
navhidden
Первичный метод без касания nonav
DPad
трекбол
рулевое колесо
Версия платформы (уровень API) Примеры:
v3
v4
v7

Измените язык приложения Android

В приведенных выше примерах вы понимаете, как локализовать ресурсы приложения. В следующем примере объясните, как изменить языковой стандарт приложения внутри приложения, а не на устройстве. Чтобы изменить только локализацию приложения, вы можете использовать утилиту ниже locale.

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

Инициализируйте язык, который пользователь предпочитает, из класса 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());
    }
}

Вам также необходимо создать базовый актив и распространить эту активность на все другие действия, чтобы вы могли изменить язык приложения только в одном месте:

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

}

Примечание. Всегда инициализируйте локаль в конструкторе.

Теперь вы можете использовать LocalizationActivity, как показано ниже.

public class MainActivity extends LocalizationActivity {

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

    }
}

Примечание. При изменении программного языка приложения необходимо перезапустить свою активность, чтобы изменить локальное изменение. Чтобы правильно работать для этого решения, вы и используйте локаль из общих настроек при запуске приложения, вы android:name=".LocaleApp" в вы Manifest.xml.

Иногда Lint checker запрашивает создание сборки релиза. Чтобы решить эту проблему, выполните нижеуказанные варианты.

Первый:

Если вы хотите отключить перевод для некоторых строк, то добавьте следующий атрибут в default string.xml

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

Во- вторых:

Игнорировать все отсутствующие переводы из файла ресурсов добавить следующий атрибут Это атрибут ignore пространства имен инструментов в файле строк, как показано ниже:

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

В третьих:

Другой способ отключить непереводимую строку

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

Если у вас много ресурсов, которые нельзя переводить, вы можете поместить их в файл с именем donottranslate.xml, и lint рассмотрит все из них непереводимые ресурсы.

В- четвертых:

Вы также можете добавить locale в файл ресурсов

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

Вы также можете отключить проверку отсутствия перевода для lint из приложения / build.gradle

lintOptions {
        
        disable 'MissingTranslation'
    }


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow