moko-resources icon indicating copy to clipboard operation
moko-resources copied to clipboard

Using Localization String in KMM

Open mikek9084 opened this issue 1 year ago • 1 comments

thank you very much, how can I use SharedRes. in common main

buildString {
        append("Limit)
        append(SharedRes.strings.km)
}

mikek9084 avatar Aug 06 '24 07:08 mikek9084

You have to use expect/actual functions in commonMain:

expect fun sharedString(res: StringResource, vararg args: Any): String

in androidMain:

[!NOTE] You will need context

actual fun sharedString(res: StringResource, vararg args: Any): String {
   return when (args.size) {
       0    -> res.getString(context)
       else -> ResourceFormattedStringDesc(res, args.toList()).toString(context)
   }
}

in iosMain:

actual fun sharedString(res: StringResource, vararg args: Any): String {
    return when (args.size) {
        0    -> res.desc().localized()
        else -> ResourceFormattedStringDesc(res, args.toList()).localized()
    }
}

Then in commonMain you can get any string like this:

val text = sharedString(MR.strings.my_string)
val text = sharedString(MR.strings.my_string_formatted, 10)

mndsl avatar Sep 01 '24 11:09 mndsl