Ontwerp een GraphQL-schema voor meertalige ondersteuning
description
Door het implementeren van een meertalige schema, kun je de gebruikerservaring verbeteren, de betrokkenheid in verschillende regio's vergroten en ervoor zorgen dat je toepassing toegankelijk is voor een breder publiek.
prompt
try_prompt
Help me een geavanceerd GraphQL-schema te ontwerpen dat meertalige inhoudsbeheer ondersteunt voor mijn domein: {{domein}}. Ik wil functies zoals: {{g ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een geavanceerd GraphQL-schema dat meertalige inhoudsbeheer voor een e-commerce domein ondersteunt, inclusief functies voor automatische vertaling, lokalisatie en taal-specifieke gegevensophaal:
```graphql
# Enum voor ondersteunde talen
enum Language {
EN # Engels
NL # Nederlands
DE # Duits
FR # Frans
ES # Spaans
# Voeg meer talen toe indien nodig
}
# Type voor vertaalbare inhoud, bijvoorbeeld productnamen en beschrijvingen
type TranslatableString {
# De standaardtekst (bijvoorbeeld in de hoofdtaal)
default: String!
# Vertalingen per taal
translations: [Translation!]!
}
type Translation {
language: Language!
text: String!
# Optioneel: timestamp van vertaling
updatedAt: String
}
# Producttype met meertalige velden
type Product {
id: ID!
name: TranslatableString!
description: TranslatableString!
price: Float!
# Andere productvelden
}
# Query voor het ophalen van producten met meertalige inhoud
type Query {
# Haal een product op met vertalingen in de gewenste taal
product(id: ID!, language: Language = NL): Product
# Haal een lijst van producten met vertalingen in de gewenste taal
products(language: Language = NL, filter: ProductFilter): [Product!]!
}
# Inputtypes voor filters
input ProductFilter {
priceRange: PriceRange
categoryIds: [ID!]
# Andere filters
}
input PriceRange {
min: Float
max: Float
}
# Mutaties voor inhoudsbeheer en automatische vertaling
type Mutation {
# Voeg een nieuw product toe
createProduct(input: CreateProductInput!): Product!
# Werk productgegevens bij
updateProduct(id: ID!, input: UpdateProductInput!): Product!
# Voeg of werk vertalingen bij
addOrUpdateTranslation(
translatableId: ID!
field: String! # Bijv. 'name' of 'description'
language: Language!
text: String!
): Boolean!
# Automatische vertaling genereren via integratie met vertaalservice
generateTranslation(
translatableId: ID!
field: String!
targetLanguage: Language!
): String! # Geeft de vertaalde tekst terug
}
# Inputtypes voor mutaties
input CreateProductInput {
name: String!
description: String!
price: Float!
# Andere productvelden
}
input UpdateProductInput {
name: String
description: String
price: Float
# Andere productvelden
}
```
**Toelichting:**
- Het schema ondersteunt meertalige inhoud door gebruik te maken van het type `TranslatableString` dat een standaardtekst bevat en een lijst met vertalingen.
- De `generateTranslation` mutation kan worden gebruikt om automatische vertalingen te genereren via een vertaal-API (zoals Google Translate), wat de inhoud automatisch vertaalt naar de gewenste taal.
- Bij het ophalen van een product wordt de gebruiker de optie gegeven om een specifieke taal te selecteren, zodat de inhoud in die taal wordt teruggegeven.
- Voor optimale efficiëntie kun je caching en batch-oproepen voor vertalingen implementeren.
Met dit schema kun je flexibel meertalige inhoud beheren, vertalingen automatiseren en lokalisatie implementeren binnen je e-commerce platform.
provider: deepseek
model: deepseek-chat
Zeker! Ik help je met een geavanceerd GraphQL-schema voor meertalig e-commerce content management. Hier is een complete schema-definitie met TypeScript-achtige syntax voor duidelijkheid:
```graphql
# Basistypes voor meertalige ondersteuning
scalar JSON
scalar DateTime
enum LanguageCode {
EN
NL
FR
DE
ES
}
type Translation {
id: ID!
language: LanguageCode!
text: String!
status: TranslationStatus!
autoTranslated: Boolean!
lastUpdated: DateTime!
}
enum TranslationStatus {
DRAFT
REVIEW
APPROVED
AUTO_TRANSLATED
}
# Meertalige product catalogus
type Product {
id: ID!
sku: String!
basePrice: Float!
categories: [Category!]!
media: [Media!]!
# Meertalige velden
translations: [ProductTranslation!]!
translation(language: LanguageCode!): ProductTranslation
# Automatische vertaling metadata
autoTranslationSettings: AutoTranslationSettings
lastTranslatedAt: DateTime
}
type ProductTranslation {
id: ID!
product: Product!
language: LanguageCode!
name: String!
description: String!
shortDescription: String
metaTitle: String
metaDescription: String
slug: String!
# Vertaalstatus management
status: TranslationStatus!
needsReview: Boolean!
autoTranslated: Boolean!
# SEO-optimalisatie
searchKeywords: [String!]
}
# Geavanceerde automatische vertaling configuratie
type AutoTranslationSettings {
id: ID!
enabled: Boolean!
targetLanguages: [LanguageCode!]!
autoApprove: Boolean!
provider: TranslationProvider!
qualityThreshold: Float
fieldsToTranslate: [TranslatableField!]!
}
enum TranslationProvider {
GOOGLE_TRANSLATE
DEEPL
AZURE
CUSTOM
}
enum TranslatableField {
NAME
DESCRIPTION
SHORT_DESCRIPTION
META_TITLE
META_DESCRIPTION
}
# Meertalige categorieën
type Category {
id: ID!
parent: Category
children: [Category!]!
products: [Product!]!
translations: [CategoryTranslation!]!
translation(language: LanguageCode!): CategoryTranslation
}
type CategoryTranslation {
id: ID!
category: Category!
language: LanguageCode!
name: String!
description: String
slug: String!
metaTitle: String
metaDescription: String
}
# Content Management System voor meertalige content
type ContentPage {
id: ID!
key: String!
translations: [ContentPageTranslation!]!
translation(language: LanguageCode!): ContentPageTranslation
}
type ContentPageTranslation {
id: ID!
page: ContentPage!
language: LanguageCode!
title: String!
content: JSON!
slug: String!
published: Boolean!
}
# Geavanceerde Query interface
type Query {
# Product queries met taalondersteuning
products(
language: LanguageCode!
filters: ProductFilters
pagination: PaginationInput
): ProductConnection!
product(
id: ID!
language: LanguageCode!
): Product
productBySlug(
slug: String!
language: LanguageCode!
): Product
# Categorie queries
categories(
language: LanguageCode!
parentId: ID
): [Category!]!
category(
id: ID!
language: LanguageCode!
): Category
# Vertaalmanagement
translationsNeedingReview: [Translation!]!
autoTranslationQueue: [Product!]!
# Meertalige content
contentPage(
key: String!
language: LanguageCode!
): ContentPageTranslation
}
# Mutaties voor contentbeheer
type Mutation {
# Product vertalingen
createProductTranslation(
productId: ID!
language: LanguageCode!
input: ProductTranslationInput!
): ProductTranslation!
updateProductTranslation(
id: ID!
input: ProductTranslationInput!
): ProductTranslation!
# Automatische vertaling triggers
triggerAutoTranslation(
productId: ID!
targetLanguages: [LanguageCode!]!
): AutoTranslationJob!
approveTranslation(
translationId: ID!
): Translation!
# Bulk operaties
bulkTranslateProducts(
productIds: [ID!]!
targetLanguages: [LanguageCode!]!
): BulkTranslationResult!
}
# Input types
input ProductTranslationInput {
name: String
description: String
shortDescription: String
metaTitle: String
metaDescription: String
slug: String
searchKeywords: [String!]
}
input ProductFilters {
categoryId: ID
searchTerm: String
priceRange: PriceRangeInput
inStock: Boolean
}
input PriceRangeInput {
min: Float
max: Float
}
input PaginationInput {
page: Int!
limit: Int!
}
# Response types
type ProductConnection {
edges: [ProductEdge!]!
pageInfo: PageInfo!
totalCount: Int!
}
type ProductEdge {
node: Product!
cursor: String!
}
type PageInfo {
hasNextPage: Boolean!
hasPreviousPage: Boolean!
startCursor: String
endCursor: String
}
type AutoTranslationJob {
id: ID!
status: JobStatus!
processed: Int!
total: Int!
errors: [String!]
}
type BulkTranslationResult {
jobId: ID!
successCount: Int!
errorCount: Int!
errors: [TranslationError!]
}
type TranslationError {
productId: ID!
language: LanguageCode!
message: String!
}
enum JobStatus {
PENDING
PROCESSING
COMPLETED
FAILED
}
# Subscription voor real-time updates
type Subscription {
translationCompleted: AutoTranslationJob!
translationProgress: AutoTranslationJob!
}
```
**Belangrijkste kenmerken van dit schema:**
1. **Flexibele vertaalstructuur**: Elke entiteit heeft aparte translation types
2. **Automatische vertaling integratie**: Ondersteuning voor multiple providers en kwaliteitscontrole
3. **Efficiënte data retrieval**: Language parameter in queries voor directe toegang
4. **Vertaalworkflow management**: Status tracking en review processen
5. **SEO-optimalisatie**: Meertalige slugs en meta-informatie
6. **Bulk operaties**: Voor massaverwerking van vertalingen
7. **Real-time updates**: Via subscriptions voor progress monitoring
**Gebruiksvoorbeeld query:**
```graphql
query GetProductPage($language: LanguageCode!) {
products(language: $language, pagination: { page: 1, limit: 20 }) {
edges {
node {
id
sku
basePrice
translation(language: $language) {
name
description
slug
}
}
}
}
categories(language: $language) {
id
translation(language: $language) {
name
slug
}
}
}
```
Dit schema biedt een schaalbare foundation voor meertalig e-commerce met geavanceerde vertaalautomatisering!

