Untitled

mail@pastecode.io avatar
unknown
kotlin
3 years ago
1.3 kB
2
Indexable
Never
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)
}