Hooks
HooksGegevens overschrijven via hooks

Gegevens overschrijven via hooks

In dit gedeelte wordt beschreven hoe je de gegevens die worden gebruikt voor het vertalen van inhoud kunt overschrijven via PHP-hooks.

Prompts voor AI-vertalingsproviders

Je kunt de prompts die naar AI-vertalingsproviders worden verzonden aanpassen via hooks in PHP-code.

Je kunt het volgende aanpassen:

  • Systeembericht
  • Promptsjabloon
  • Prompt

Voor elk hiervan zijn er twee hooks:

  • gatompl:<hook_name>
  • gatompl:<hook_name>:<provider_name>

De eerste hook wordt gebruikt om de variabelen voor alle providers te wijzigen.

De tweede hook wordt gebruikt om de variabelen voor een specifieke provider te wijzigen.

De volgende providernamen worden ondersteund:

  • chatgpt
  • claude
  • deepseek
  • gemini
  • mistral
  • openrouter
  • self_hosted_llm

De onderstaande hooks ontvangen niet de entiteitsgegevens om te vertalen (bijv.: post-ID, custom post type, enz.), maar alleen de taalcode en de te vertalen tekstreeksen.

Als je de entiteitsgegevens nodig hebt, kun je deze ophalen via de action hook gatompl:query_execution_start, zoals in dit voorbeeld.

Omdat de hook wordt geactiveerd voordat de query wordt uitgevoerd, kun je de gegevens in een variabele opslaan en gebruiken in een van de onderstaande filter hooks.

Systeembericht

Het Systeembericht is bedoeld zodat de AI de context van de vertaling begrijpt. Bijv.:

You are a language translator.

gatompl:system_message

add_filter(
  'gatompl:system_message',
  function (string $systemMessage, string $providerName): string {
    return $systemMessage;
  },
  10,
  2
);

gatompl:system_message:<provider_name>

add_filter(
  'gatompl:system_message:chatgpt',
  function (string $systemMessage): string {
    return $systemMessage;
  }
);

Promptsjabloon

Het Promptsjabloon bevat variabele plaatshouders die tijdens runtime worden opgelost. Bijv.:

I'm working on internationalizing my application.
 
I've created a JSON with sentences in {$sourceLanguage}. Please translate the sentences to {$targetLanguage} from {$targetCountry}.

gatompl:prompt_template

add_filter(
  'gatompl:prompt_template',
  function (string $promptTemplate, string $providerName): string {
    return $promptTemplate;
  },
  10,
  2
);

gatompl:prompt_template:<provider_name>

add_filter(
  'gatompl:prompt_template:chatgpt',
  function (string $promptTemplate): string {
    return $promptTemplate;
  }
);

Prompt

De Prompt is de daadwerkelijke prompt die naar de AI-service wordt verzonden, nadat het promptsjabloon is opgelost. Er wordt extra informatie toegevoegd om te zorgen dat het formaat van de respons correct is. Bijv.:

I'm working on internationalizing my application.
 
I've created a JSON with sentences in English. Please translate the sentences to French from France.
 
If a sentence contains HTML:
- Translate the text inside the HTML tags. (eg: `<p>Hello world</p>` => `<p>Hola mundo</p>`)
- Translate the following properties inside the HTML tags: alt, title, placeholder, aria-label, aria-describedby, aria-labelledby, aria-placeholder. Do not translate any other property.
- Ensure that any double quotes (") within a translated string inside an HTML tag attribute are properly escaped by adding a backslash before them (\"), but only if they haven't been escaped already.
- Ensure that the quotes in HTML tag attributes are not escaped (eg: keep `<mark class="has-inline-color">` as is, do not convert to `<mark class=\"has-inline-color\">`).
- Ensure that slashes within HTML tags are not escaped (eg: keep `<p>Hello world</p>` as is, do not convert to `<p>Hello world<\/p>`).
Keep emojis exactly as they are, do not translate them.
Ensure that the response is encoded using UTF-8 for all characters.

De hooks ontvangen de volgende aanvullende parameters:

ParameterBeschrijvingVoorbeeld
$contentsDe te vertalen tekstreeksen['hello world']
$sourceLanguageCodeISO-639-code van de taal waaruit wordt vertaalden
$sourceLanguageNameNaam van de brontaal (in het Engels)English
$targetLanguageCodeISO-639-code van de taal waarnaar wordt vertaaldfr
$targetLanguageNameNaam van de doeltaal (in het Engels)French
$targetCountryCodeISO-3166-code van het land waarvoor de vertaling wordt gelokaliseerdFR
$targetCountryNameNaam van het land (in het Engels) waarvoor de vertaling wordt gelokaliseerdFrance

gatompl:prompt

add_filter(
  'gatompl:prompt',
  /**
   * @param string[] $contents The strings to be translated (eg: `['hello world', 'how are you?']`).
   */
  function (
    string $prompt,
    string $providerName,
    array $contents,
    string $sourceLanguageCode,
    string $sourceLanguageName,
    string $targetLanguageCode,
    string $targetLanguageName,
    string $targetCountryCode,
    string $targetCountryName
): string {
    return $prompt;
  },
  10,
  9
);

gatompl:prompt:<provider_name>

add_filter(
  'gatompl:prompt:chatgpt',
  /**
   * @param string[] $contents The strings to be translated (eg: `['hello world', 'how are you?']`).
   */
  function (
    string $prompt,
    array $contents,
    string $sourceLanguageCode,
    string $sourceLanguageName,
    string $targetLanguageCode,
    string $targetLanguageName,
    string $targetCountryCode,
    string $targetCountryName
): string {
    return $prompt;
  },
  10,
  8
);

Query-variabelen

Gato AI Translations for Polylang voert een GraphQL-query uit om de vertaling te verwerken. De configuratie (gedefinieerd in de plugin-instellingen) wordt via GraphQL-variabelen aan de query doorgegeven.

Je kunt de query-variabelen aanpassen via de volgende hook:

  • gatompl:query_variables

De hook ontvangt de volgende aanvullende parameters:

ParameterBeschrijvingVoorbeeld
$querySlugSlug van de uit te voeren querytranslate-customposts

De lijst met ondersteunde query-slugs is beschikbaar in het gedeelte Hooks voor query-uitvoering.

add_filter(
  'gatompl:query_variables',
  /**
   * @param array<string, mixed> $variables The variables to pass to the query.
   * @return array<string, mixed> The variables to pass to the query.
   */
  function (
    array $variables,
    string $querySlug
): array {
    return $variables;
  },
  10,
  2
);

Meta-sleutels

Je kunt de meta-sleutels die worden gesynchroniseerd/vertaald aanpassen via de volgende hooks:

  • gatompl:syncable_meta_keys
  • gatompl:translatable_meta_keys
  • gatompl:custompost_and_media_entity_reference_translatable_meta_keys
  • gatompl:taxonomy_entity_reference_translatable_meta_keys

De hooks ontvangen de volgende parameters:

ParameterBeschrijving
$objectDe te vertalen entiteit, van het type WP_Post (voor custom posts en media) of WP_Term (voor tags en categorieën)
$startingMetaKeysDe reeks meta-sleutels die aanwezig zijn in de entiteit

gatompl:syncable_meta_keys

Meta-sleutels om te kopiëren van de bronentiteit naar de vertaalde entiteit (voor berichten, media, tags en categorieën).

add_filter(
  'gatompl:syncable_meta_keys',
  /**
   * @param string[] $metaKeys
   * @param string[] $startingMetaKeys
   * @return string[]
   */
  function (array $metaKeys, WP_Post | WP_Term $object, array $startingMetaKeys): array
  {
    $metaKeysToCopy = $object instanceof WP_Post ? [
      '_myproject_meta_key_for_posts',
    ] : [
      '_myproject_meta_key_for_terms',
    ];
    return array_merge($metaKeys, array_intersect($startingMetaKeys, $metaKeysToCopy));
  },
  10,
  3
);

gatompl:translatable_meta_keys

Meta-sleutels met tekstreeksen, om te kopiëren en te vertalen van de bronentiteit naar de vertaalde entiteit.

add_filter(
  'gatompl:translatable_meta_keys',
  /**
   * @param string[] $metaKeys
   * @param string[] $startingMetaKeys
   * @return string[]
   */
  function (array $metaKeys, WP_Post | WP_Term $object, array $startingMetaKeys): array
  {
    $metaKeysToCopy = $object instanceof WP_Post ? [
      '_myproject_meta_key_for_posts',
    ] : [
      '_myproject_meta_key_for_terms',
    ];
    return array_merge($metaKeys, array_intersect($startingMetaKeys, $metaKeysToCopy));
  },
  10,
  3
);

gatompl:custompost_and_media_entity_reference_translatable_meta_keys

Meta-sleutels met verwijzingen naar post-ID's (d.w.z. custom posts en media), om te kopiëren en te vertalen naar het overeenkomstige ID voor de doeltaal.

add_filter(
  'gatompl:custompost_and_media_entity_reference_translatable_meta_keys',
  /**
   * @param string[] $metaKeys
   * @param string[] $startingMetaKeys
   * @return string[]
   */
  function (array $metaKeys, WP_Post | WP_Term $object, array $startingMetaKeys): array
  {
    $metaKeysToCopy = $object instanceof WP_Post ? [
      '_myproject_meta_key_for_posts',
    ] : [
      '_myproject_meta_key_for_terms',
    ];
    return array_merge($metaKeys, array_intersect($startingMetaKeys, $metaKeysToCopy));
  },
  10,
  3
);

gatompl:taxonomy_entity_reference_translatable_meta_keys

Meta-sleutels met verwijzingen naar taxonomieterm-ID's (d.w.z. tags en categorieën), om te kopiëren en te vertalen naar het overeenkomstige ID voor de doeltaal.

add_filter(
  'gatompl:taxonomy_entity_reference_translatable_meta_keys',
  /**
   * @param string[] $metaKeys
   * @param string[] $startingMetaKeys
   * @return string[]
   */
  function (array $metaKeys, WP_Post | WP_Term $object, array $startingMetaKeys): array
  {
    $metaKeysToCopy = $object instanceof WP_Post ? [
      '_myproject_meta_key_for_posts',
    ] : [
      '_myproject_meta_key_for_terms',
    ];
    return array_merge($metaKeys, array_intersect($startingMetaKeys, $metaKeysToCopy));
  },
  10,
  3
);