feat: added localization for templates by language

This commit is contained in:
2026-06-21 21:11:56 +03:00
parent 24927ba7ef
commit 9d9b90deb1
4 changed files with 38 additions and 9 deletions
@@ -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() ?: "???"
}