1

我有一个Item类型。我希望将其标题翻译成多种语言。我在想像这样的结构:

Item {
  title {
    de
    fr
    pa
  }
}

管理界面需要加载所有标题进行编辑,并可选择添加新标题。换句话说,我正在寻找一个'dict'。

我现在能想出的解决这个问题的唯一方法是使用 aGraphQLString并将语言字符串编码为 JSON 对象。

还有一个,还是应该有?

4

2 回答 2

1

您可以创建一个类型来表示本地化字符串:

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
        }
      }
    `,
  },
});
于 2015-12-05T01:59:09.083 回答
0

我认为您正在寻找 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

于 2015-09-28T02:57:14.620 回答