Untitled
unknown
kotlin
4 years ago
1.3 kB
5
Indexable
class PluralString(val none: String, val one: String, val many: String) {
operator fun invoke(count: Int): String {
return when(count) {
0 -> none
1 -> one
else -> many
}
}
}
interface Strings {
val hello: String
val worlds: PluralString
fun helloUser(user: String): String
val blam: String
get() = "Blam" // Дефолтная реализация, для случая, когда перевод еще не готов
}
class EnStrings : Strings {
override val hello = "Hello"
override val worlds = PluralString("Nothing", "World", "Worlds")
override fun helloUser(user: String) = "Hello $user"
}
class RuStrings : Strings {
override val hello = "Привет"
override val worlds = PluralString("Пустота", "Мир", "Миры")
override fun helloUser(user: String) = "$user, привет!"
}
fun getStrings(lang: String): Strings {
return if (lang == "ru") RuStrings() else EnStrings()
}
fun main() {
// В Compose это будет глобальное свойство, возвращающее Strings из CompositionLocal
val tr = getStrings("ru")
println(tr.hello)
println(tr.worlds(1))
println(tr.helloUser("Tim"))
println(tr.blam)
}Editor is loading...