我有一个Item
类型。我希望将其标题翻译成多种语言。我在想像这样的结构:
Item {
title {
de
fr
pa
}
}
管理界面需要加载所有标题进行编辑,并可选择添加新标题。换句话说,我正在寻找一个'dict'。
我现在能想出的解决这个问题的唯一方法是使用 aGraphQLString
并将语言字符串编码为 JSON 对象。
还有一个,还是应该有?
您可以创建一个类型来表示本地化字符串:
const LocalizedStringType = new GraphQLObjectType({
name: 'LocalizedString',
description: 'A value object that represents a string and a language code',
fields: () => ({
languageCode: {type: GraphQLString},
value: {type: GraphQLString},
}),
});
然后公开此类型的对象列表:
const ItemType = new GraphQLObjectType({
name: 'Item',
fields: () => ({
localizedTitles: {type: GraphQLList(LocalizedStringType)}
}),
});
在您的容器中,您可以随意操作此列表:
class Item extends React.Component {
state = {language: 'en'};
render() {
const title = (
this.props.item.localizedTitles.find(localizedString =>
localizedString.languageCode === this.state.language
) ||
`**Title missing for language with code ${this.state.language}**`
);
return <h1>{title}</h1>;
}
}
Item = Relay.createContainer(Item, {
fragments: {
item: () => Relay.QL`
fragment on Item {
localizedTitles {
languageCode
value
}
}
`,
},
});
我认为您正在寻找 GraphQLEnumType。
https://github.com/graphql/graphql-js/blob/master/src/tests/starWarsSchema.js#L77 _ _
并用作论据。像这样: https : //github.com/graphql/graphql-js/blob/master/src/tests/starWarsSchema.js#L236