gpt4 book ai didi

Neo4j SDN 国际化

转载 作者:行者123 更新时间:2023-12-01 15:14:21 24 4
gpt4 key购买 nike

我有以下 SDN 4 实体:

决策特征:

@NodeEntity
public class Value {

private final static String SET_FOR = "SET_FOR";
private final static String SET_ON = "SET_ON";

@Relationship(type = SET_FOR, direction = Relationship.OUTGOING)
private Decision decision;

@Relationship(type = SET_ON, direction = Relationship.OUTGOING)
private Characteristic characteristic;

@Index(unique = false)
private Object value;

private String description;
...

}

我想为 Value 添加多语言支持,以便能够提供 Value.valueValue.description 以任何语言。

您能否展示一种使用当前架构实现此功能的正确方法?

例如,我是否应该在那里添加一个额外的节点(与值节点关联)来表示每种新语言的值/描述对,或者可以通过在现有值节点内引入新的特定于语言的属性来完成?

最佳答案

通过 Spring Data Neo4j 添加多语言支持有很多选项。

https://graphaware.com/neo4j/2016/09/29/internationalization-with-spring-neo4j.html 中概述的一种方法(由我撰写),可能会让您在实现解决方案方面领先一步。

按照博客对 SDN 项目进行设置和配置后,对于每个 Value 对象,您可以使用 Cypher 定义两个 MessageDefinitions,其中一个的代码为与 Value.value 匹配,另一个人的代码与 Value.description 匹配。按照此路线,您实际上是添加与 Value 节点关联的额外节点(即:MessageDefinition 节点),该节点表示带有国际化和本地化消息的值和描述。换句话说,Value 的值和描述属性充当相应 MessageDefinition 节点的键。

在 Neo4j 中配置您的项目并定义所需的 MessageDefinitions 后,您可以在 Controller 或服务中使用以下代码来获取国际化和本地化值:

    Value value = valueRepository.findOne(id);

Object arguments[] = new Object[] {};
Locale locale = LocaleContextHolder.getLocale();

String valueMessageKey = value.getValue();
String i18Value = messageSource.getMessage(valueMessageKey, arguments, "defaultValue", locale);

String descriptionMessageKey = value.getDescription();
String i18Description = messageSource.getMessage(descriptionMessageKey, arguments, "defaultDescription", locale);

System.out.println("i18Value: " + i18Value);
System.out.println("i18Description: " + i18Description);

值得注意的是,这种方法的一个弱点是 MessageDefinitionValue 对象通过匹配的节点属性而不是底层的 Neo4j 关系来关联。效率较低,因为它没有利用 Neo4j 的核心优势(即:关系)。虽然这是需要注意的事情,但它是否是一个实际问题取决于您的用例。如果这是一个破坏性的因素,可以修改 CypherMessageSource 项目以更符合您的要求。

查看示例代码,请注意,您可能希望将 Value.value 属性的类型从 Object 更改为 String,以确保它是可靠的键。

关于Neo4j SDN 国际化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44004026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com