forked from omni/OmniCards
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 activityContext = LocalActivity.current
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
||||||
|
val language = getLanguage(context)
|
||||||
|
|
||||||
var filledFields by rememberSaveable { mutableStateOf(template.fields.associate { field ->
|
var filledFields by rememberSaveable { mutableStateOf(template.fields.associate { field ->
|
||||||
field.id to (field.default ?: "")
|
field.id to (field.default ?: "")
|
||||||
}) }
|
}) }
|
||||||
|
|
||||||
Page(
|
Page(
|
||||||
template.name,
|
selectTemplateNameViaLanguage(template.names, language),
|
||||||
innerPadding
|
innerPadding
|
||||||
) {
|
) {
|
||||||
val fieldModifier = Modifier.fillMaxWidth()
|
val fieldModifier = Modifier.fillMaxWidth()
|
||||||
@@ -88,7 +90,7 @@ fun FillTemplatePage(template: Template, innerPadding: PaddingValues) {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
modifier = fieldModifier,
|
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 activityContext = LocalActivity.current
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
||||||
|
val language = getLanguage(context)
|
||||||
|
|
||||||
var templates by remember { mutableStateOf<List<Template>?>(null) }
|
var templates by remember { mutableStateOf<List<Template>?>(null) }
|
||||||
var loadingError by remember { mutableStateOf<String?>(null) }
|
var loadingError by remember { mutableStateOf<String?>(null) }
|
||||||
|
|
||||||
@@ -134,7 +136,7 @@ fun SelectTemplatePage(innerPadding: PaddingValues) {
|
|||||||
fillTemplateLauncher.launch(intent)
|
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.JSONArray
|
||||||
import org.json.JSONObject
|
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
|
@Serializable
|
||||||
class Field(
|
class Field(
|
||||||
val id: String,
|
val id: String,
|
||||||
val name: String,
|
val names: LinkedHashMap<String, String>,
|
||||||
val default: String? = null,
|
val default: String? = null,
|
||||||
val maybeEmpty: Boolean = false
|
val maybeEmpty: Boolean = false
|
||||||
)
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
class Template(
|
class Template(
|
||||||
val name: String,
|
val names: LinkedHashMap<String, String>,
|
||||||
val fields: List<Field>,
|
val fields: List<Field>,
|
||||||
val template: String
|
val template: String
|
||||||
) {
|
) {
|
||||||
@@ -30,14 +42,14 @@ class Template(
|
|||||||
|
|
||||||
fields.add(Field(
|
fields.add(Field(
|
||||||
id = fieldObj.getString("id"),
|
id = fieldObj.getString("id"),
|
||||||
name = fieldObj.getString("name"),
|
names = jsonObjectToMap(fieldObj.getJSONObject("names")),
|
||||||
default = fieldObj.optString("default"),
|
default = fieldObj.optString("default"),
|
||||||
maybeEmpty = fieldObj.optBoolean("maybeEmpty")
|
maybeEmpty = fieldObj.optBoolean("maybeEmpty")
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
return Template(
|
return Template(
|
||||||
name = obj.getString("name"),
|
names = jsonObjectToMap(obj.getJSONObject("names")),
|
||||||
fields = fields,
|
fields = fields,
|
||||||
template = obj.getString("template")
|
template = obj.getString("template")
|
||||||
)
|
)
|
||||||
@@ -58,14 +70,14 @@ class Template(
|
|||||||
|
|
||||||
fields.add(Field(
|
fields.add(Field(
|
||||||
id = fieldObj.getString("id"),
|
id = fieldObj.getString("id"),
|
||||||
name = fieldObj.getString("name"),
|
names = jsonObjectToMap(fieldObj.getJSONObject("names")),
|
||||||
default = fieldObj.optString("default"),
|
default = fieldObj.optString("default"),
|
||||||
maybeEmpty = fieldObj.optBoolean("maybeEmpty")
|
maybeEmpty = fieldObj.optBoolean("maybeEmpty")
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
templates.add(Template(
|
templates.add(Template(
|
||||||
name = obj.getString("name"),
|
names = jsonObjectToMap(obj.getJSONObject("names")),
|
||||||
fields = fields,
|
fields = fields,
|
||||||
template = obj.getString("template")
|
template = obj.getString("template")
|
||||||
))
|
))
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package ru.omni_devel.cards
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
|
import android.os.LocaleList
|
||||||
import com.google.android.gms.wearable.Wearable
|
import com.google.android.gms.wearable.Wearable
|
||||||
import com.google.zxing.BarcodeFormat
|
import com.google.zxing.BarcodeFormat
|
||||||
import com.google.zxing.MultiFormatWriter
|
import com.google.zxing.MultiFormatWriter
|
||||||
@@ -66,3 +67,15 @@ fun checkCardData(name: String, value: String): Int? {
|
|||||||
|
|
||||||
return null
|
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