You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为多语言词汇清单App搭建类似谷歌翻译的数据库结构?

方案设计

完全不需要为每个语言对单独建表,这种方案扩展性极差,仅需要调整现有Word实体结构,新增语言对标识字段即可。

第一步:调整Entity实体结构

在原有字段基础上新增源语言source_lang、目标语言target_lang两个字段,同时为这两个字段添加联合索引,提升按语言对查询的性能:

@Entity(
    tableName = "words",
    indices = [Index(value = ["source_lang", "target_lang"])]
)
data class Word(
    val first_word: String,
    val second_word: String,
    val bookmarked: Boolean,
    // 新增字段:源语言ISO 639-1编码,例如ko=韩语、en=英语、ja=日语
    val source_lang: String,
    // 新增字段:目标语言ISO 639-1编码
    val target_lang: String,
    @PrimaryKey(autoGenerate = true)
    val id: Int
)

保存单词的时候,直接把当前App设置的源语言、目标语言编码一起存入对应字段即可。

第二步:编写对应DAO查询方法

当用户切换语言对后,仅需要按当前选中的源语言、目标语言过滤即可拿到对应列表:

@Dao
interface WordDao {
    // 按指定语言对查询所有单词
    @Query("SELECT * FROM words WHERE source_lang = :sourceLang AND target_lang = :targetLang ORDER BY id DESC")
    suspend fun getWordsByLangPair(sourceLang: String, targetLang: String): List<Word>

    // 其他原有增删改方法无需调整,插入时传入source_lang和target_lang即可
    @Insert
    suspend fun insertWord(word: Word)
}

可选优化(适合多语言对较多的场景)

如果你的App支持的语言数量超过10种,还可以单独建一张语言对配置表,避免重复存储语言编码字符串,进一步节省存储空间:

@Entity(tableName = "lang_pairs", primaryKeys = ["source_lang", "target_lang"])
data class LangPair(
    val source_lang: String,
    val target_lang: String,
    val pair_name: String // 可选,例如"韩语-英语",用于展示在语言切换列表
)

小体量App不需要做这层拆分,直接用第一种方案完全够用。

内容的提问来源于stack exchange,提问作者Morteza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:42:03