从 viewModel 中获取正确的文化资源字符串,在 kotlin jetpack compose 中注入上下文

问题描述 投票:0回答:1

我试图从视图模型和用例中获取资源字符串,我有六个字符串翻译资源文件,但我总是得到默认的字符串翻译,没有得到既定的文化

我的界面

interface ResourceController {
    fun getString(resourceId: Int): String
}

我的实现

class ResourceControllerImpl @Inject constructor(private val context: Context
) : ResourceController {
    override fun getString(resourceId: Int): String {
        return context.getString(resourceId)
    }
}

我的模块注入


@InstallIn(SingletonComponent::class)
@Module
object ConfigModule {
    @Provides
    @Singleton
    fun resourceControllerProvider(@ApplicationContext context: Context): ResourceController {
        return ResourceControllerImpl(context)
    }
}

我的用例

class GetTemplateToPrint @Inject constructor(
    private val resourceController: ResourceController,
    private val deviceUtils: DeviceUtils
    ) {
    fun invoke(): String {
        var dataToPrint : String = ""
        val terminal = deviceUtils.getDeviceSerialNumber() ?: deviceUtils.getDeviceId()
        dataToPrint = "${getString(R.string.serial_number_label)}:| $terminal"
        return dataToPrint
    }

    private fun getString(resId: Int): String {
        return resourceController.getString(resId)
    }
}

R.string.serial_number_label 存在于六个资源字符串文件中(es, en, fr, it, de, ca) 但它总是返回默认资源字符串

有人知道我该怎么做吗?谢谢:)

kotlin dependency-injection android-jetpack-compose dagger-hilt applicationcontext
1个回答
0
投票

您似乎正在使用上下文,您可以尝试使用吗

context.resource,getString()

让我知道它是否适合你

© www.soinside.com 2019 - 2024. All rights reserved.