Определите язык приложения вместо языка телефона - PullRequest
0 голосов
/ 15 мая 2019

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

Есть ли способ получить язык, используемый приложением (по умолчанию английский) вместо языка, выбранного в телефоне?

Похоже, это возвращает только язык телефона:

Locale.getDefault()
getContext().getResources().getConfiguration().locale

Снимок экрана: enter image description here

Ответы [ 3 ]

0 голосов
/ 17 мая 2019

Попробуйте это:

Я сделал одну функцию расширения для форматирования даты в локали приложения по умолчанию или только на английском языке.

Примечание. ЭтоФункция всегда возвращает отформатированную дату на английском языке, независимо от того, какой у вас язык устройства или какой язык вашего приложения.

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

Перед отображением DatePickerDialog установите Locale на en следующим образом.

Locale.setDefault(Locale("en"))
startDatePickerDialog.show()

И после этого используйте этот метод для форматирования даты.

 fun Context.getFormattedDate(
    inputFormat: String = "dd/MM/yyyy",
    outputFormat: String,
    inputDate: String,
    locale: Locale = Locale("en")
): String {

    val inputFormat = inputFormat
    var outputFormat = outputFormat

    var parsed: Date? = null
    var outputDate = ""

    val dfInput = SimpleDateFormat(inputFormat, locale)
    val dfOutput = SimpleDateFormat(outputFormat, locale)

    try {
        parsed = dfInput.parse(inputDate)
        outputDate = dfOutput.format(parsed)
    } catch (e: Exception) {
        Log.e("formattedDateFromString", "Exception in formate Date From string(): " + e.message)
        e.printStackTrace()
    }
    return outputDate

}

Как использовать эту функцию

 Log.e("Formated date", getFormattedDate(
                    inputFormat = "dd/MM/yyyy",
                    outputFormat = "dd-MMM-yyyy",
                    inputDate = "17/05/2019"
                )
            )
0 голосов
/ 20 мая 2019

Поскольку нет полезного ответа, я опубликую свое решение для этой проблемы.

Поэтому я решил создать xml-файл для каждого поддерживаемого языка с кодом локали внутри:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="language_locale">en</string>
</resources>

Пример использования:

fun Date.formatWithShortMonthAndDay(context: Context, date: Date): String {
    val locale = context.resources.getString(R.string.language_locale)
    return SimpleDateFormat(DATE_WITH_SHORT_MONTH_AND_DAY_PATTERN, Locale(locale)).format(date)
}
0 голосов
/ 15 мая 2019

Получить язык системы

Resources.getSystem().getConfiguration().locale.getLanguage();

Получить язык приложения

String appLang = Locale.getDefault().getLanguage();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...