检测应用程序语言而非电话语言

时间:2019-05-15 12:22:10

标签: java android kotlin

我有多语言应用程序,并且如果应用程序翻译不支持手机上的所选语言,我想用英文显示日期。

是否有任何方法来获取应用程序使用的语言(默认英语) 而不是手机中选择的语言?

看起来像是只返回电话语言:

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

截屏: enter image description here

3 个答案:

答案 0 :(得分:0)

获取系统语言

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

获取应用语言

String appLang = Locale.getDefault().getLanguage();

答案 1 :(得分:0)

尝试一下:

我已经做了一个扩展功能,可以使用应用的默认语言环境或仅英语来格式化日期。

注意:此功能将始终以英语返回格式化日期,与您的设备语言或应用程序语言无关。

如果要根据应用程序语言进行约会,只需将应用程序的所选语言环境传递给此方法即可。

在显示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"
                )
            )

答案 2 :(得分:0)

由于没有帮助,我将针对这个问题发布解决方案。

因此,我决定为每种受支持的语言创建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)
}