我的应用程序几乎准备就绪,但有一个问题,我不知道如何处理,这是我的应用程序支持阿拉伯语和英语.英语是应用程序的主要语言,用户可以在应用程序设置中更改它.我的应用程序提供的服务名称,价格,和描述是在英语.我想做的是当用户更改应用程序语言时,阿拉伯语数据会被检索到,所以如果我添加了另一个阿拉伯语版本的名称,价格和描述文档.能得到数据吗我将分享一个截图和一些代码. 注意:我正在使用Java

为了从Firebase获取服务数据并将其加载到Recylerview中,我有一个适配器和一个型号,其中包含名称、价格和描述.

Query query = db.collection("ServiceInfo");
    FirestoreRecyclerOptions<ServiceModel> options = new FirestoreRecyclerOptions.Builder<ServiceModel>()
            .setQuery(query, ServiceModel.class).build();
    adapter = new ServiceAdapter(options);

this is how my database is structured enter image description here

enter image description here

谢谢

推荐答案

如果你想配置你的Firebase应用程序以支持多种语言,这意味着根据用户 Select 的首选语言来显示数据,那么你必须稍微改变文档的 struct .

这意味着,如果应用程序配置为英语,则应以英语显示数据;如果应用程序配置为阿拉伯语,则应以阿拉伯语显示数据,以此类推.要实现这种功能,文档应包含翻译成所有可用语言的数据.因此,文档架构应如下所示:

db
|
--- ServiceInfo (collection)
     |
     --- $docId (document)
          |
          --- name: "Advice"
          |
          --- price: 5
          |
          --- description (map)
               |
               --- en: "text in English"
               |
               --- fr: "text in French"
               |
               --- de: "text in German"

如您所见,description不是字符串类型的字段,而是map类型的字段.这意味着当您显示数据时,您必须首先判断用户 Select 了哪种语言,然后深入 map 字段以获取与所选语言相对应的数据.

Java相关问答推荐

如何审查Java dtos中的自定义注释字段?

Quarkus keycloat配置不工作.quarkus. keycloak. policy—enforcer. enable = true在. yaml表示中不工作

在Java Stream上调用collect方法出现意外结果

Spring Boot 3.2.2中的@Inject和@Resource Remove

Spark上下文在向Spark提交数据集时具有内容,但Spark在实际构建它时发现它为空

基于调车场算法的科学计算器

具有阻塞方法的开源库是否应该为执行提供异步选项?

当Volatile关键字真的是必要的时候?

在Java 17中使用两个十进制数字分析时间时出错,但在Java 8中成功

在JDK 1.8源代码中,为什么使用A-B 0来确定哪个更大,而不是A B?

用OSQL创建索引

如何从日期中截取时间并将其传递给组件?

如何在 spring 数据的MongoDB派生查询方法中使用$EXISTS

有没有可能在时间范围内得到多种解决方案?

是否在settings.xml中使用条件Maven镜像?

如何在不作为类出现的表上执行原生查询?

JOLT根据值删除并保留其余的json键

JXBrowser是否支持加载Chrome扩展?

如何利用OpenTelemeter将初始值(零)输出到普罗米修斯

ANTLR 接受特殊字符,例如 .标识符或表达式中的(点)和 ,(逗号)