feat: added localization for templates by language
This commit is contained in:
@@ -69,12 +69,14 @@ fun FillTemplatePage(template: Template, innerPadding: PaddingValues) {
|
||||
val activityContext = LocalActivity.current
|
||||
val context = LocalContext.current
|
||||
|
||||
val language = getLanguage(context)
|
||||
|
||||
var filledFields by rememberSaveable { mutableStateOf(template.fields.associate { field ->
|
||||
field.id to (field.default ?: "")
|
||||
}) }
|
||||
|
||||
Page(
|
||||
template.name,
|
||||
selectTemplateNameViaLanguage(template.names, language),
|
||||
innerPadding
|
||||
) {
|
||||
val fieldModifier = Modifier.fillMaxWidth()
|
||||
@@ -88,7 +90,7 @@ fun FillTemplatePage(template: Template, innerPadding: PaddingValues) {
|
||||
}
|
||||
},
|
||||
modifier = fieldModifier,
|
||||
label = { Text((if (field.maybeEmpty) "" else "*") + field.name) }
|
||||
label = { Text((if (field.maybeEmpty) "" else "*") + selectTemplateNameViaLanguage(field.names, language)) }
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -64,6 +64,8 @@ fun SelectTemplatePage(innerPadding: PaddingValues) {
|
||||
val activityContext = LocalActivity.current
|
||||
val context = LocalContext.current
|
||||
|
||||
val language = getLanguage(context)
|
||||
|
||||
var templates by remember { mutableStateOf<List<Template>?>(null) }
|
||||
var loadingError by remember { mutableStateOf<String?>(null) }
|
||||
|
||||
@@ -134,7 +136,7 @@ fun SelectTemplatePage(innerPadding: PaddingValues) {
|
||||
fillTemplateLauncher.launch(intent)
|
||||
}
|
||||
) {
|
||||
Text(template.name)
|
||||
Text(selectTemplateNameViaLanguage(template.names, language))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,17 +4,29 @@ import kotlinx.serialization.Serializable
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONObject
|
||||
|
||||
private fun jsonObjectToMap(obj: JSONObject): LinkedHashMap<String, String> {
|
||||
val map = LinkedHashMap<String, String>()
|
||||
val keys = obj.keys()
|
||||
|
||||
while (keys.hasNext()) {
|
||||
val key = keys.next()
|
||||
map[key] = obj.getString(key)
|
||||
}
|
||||
|
||||
return map
|
||||
}
|
||||
|
||||
@Serializable
|
||||
class Field(
|
||||
val id: String,
|
||||
val name: String,
|
||||
val names: LinkedHashMap<String, String>,
|
||||
val default: String? = null,
|
||||
val maybeEmpty: Boolean = false
|
||||
)
|
||||
|
||||
@Serializable
|
||||
class Template(
|
||||
val name: String,
|
||||
val names: LinkedHashMap<String, String>,
|
||||
val fields: List<Field>,
|
||||
val template: String
|
||||
) {
|
||||
@@ -30,14 +42,14 @@ class Template(
|
||||
|
||||
fields.add(Field(
|
||||
id = fieldObj.getString("id"),
|
||||
name = fieldObj.getString("name"),
|
||||
names = jsonObjectToMap(fieldObj.getJSONObject("names")),
|
||||
default = fieldObj.optString("default"),
|
||||
maybeEmpty = fieldObj.optBoolean("maybeEmpty")
|
||||
))
|
||||
}
|
||||
|
||||
return Template(
|
||||
name = obj.getString("name"),
|
||||
names = jsonObjectToMap(obj.getJSONObject("names")),
|
||||
fields = fields,
|
||||
template = obj.getString("template")
|
||||
)
|
||||
@@ -58,14 +70,14 @@ class Template(
|
||||
|
||||
fields.add(Field(
|
||||
id = fieldObj.getString("id"),
|
||||
name = fieldObj.getString("name"),
|
||||
names = jsonObjectToMap(fieldObj.getJSONObject("names")),
|
||||
default = fieldObj.optString("default"),
|
||||
maybeEmpty = fieldObj.optBoolean("maybeEmpty")
|
||||
))
|
||||
}
|
||||
|
||||
templates.add(Template(
|
||||
name = obj.getString("name"),
|
||||
names = jsonObjectToMap(obj.getJSONObject("names")),
|
||||
fields = fields,
|
||||
template = obj.getString("template")
|
||||
))
|
||||
|
||||
@@ -2,6 +2,7 @@ package ru.omni_devel.cards
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.os.LocaleList
|
||||
import com.google.android.gms.wearable.Wearable
|
||||
import com.google.zxing.BarcodeFormat
|
||||
import com.google.zxing.MultiFormatWriter
|
||||
@@ -66,3 +67,15 @@ fun checkCardData(name: String, value: String): Int? {
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
fun getLanguage(context: Context): String {
|
||||
val locales: LocaleList = context.resources.configuration.locales
|
||||
val primaryLocale = locales[0]
|
||||
val languageCode = primaryLocale.language
|
||||
|
||||
return languageCode
|
||||
}
|
||||
|
||||
fun selectTemplateNameViaLanguage(names: LinkedHashMap<String, String>, language: String): String {
|
||||
return names[language] ?: names.values.firstOrNull() ?: "???"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user