discourse-ai/lib/translation/topic_title_translator.rb
Natalie Tay 373e2305d6
FEATURE: Automatic translation and localization of posts, topics, categories (#1376)
Related: https://github.com/discourse/discourse-translator/pull/310

This commit includes all the jobs and event hooks to localize posts, topics, and categories.

A few notes:
- `feature_name: "translation"` because the site setting is `ai-translation` and module is `Translation`
- we will switch to proper ai-feature in the near future, and can consider using the persona_user as `localization.localizer_user_id`
- keeping things flat within the module for now as we will be moving to ai-feature soon and have to rearrange
- Settings renamed/introduced are:
  - ai_translation_backfill_rate (0)
  - ai_translation_backfill_limit_to_public_content (true)
  - ai_translation_backfill_max_age_days (5)
  - ai_translation_verbose_logs (false)
2025-05-29 17:28:06 +08:00

48 lines
2.3 KiB
Ruby

# frozen_string_literal: true
module DiscourseAi
module Translation
class TopicTitleTranslator < BaseTranslator
PROMPT_TEMPLATE = <<~TEXT.freeze
You are a translation service specializing in translating forum post titles from English to the asked target_language. Your task is to provide accurate and contextually appropriate translations while adhering to the following guidelines:
1. Translate the given title from English to target_language asked.
2. Keep proper nouns and technical terms in their original language.
3. Attempt to keep the translated title length close to the original when possible.
4. Ensure the translation maintains the original meaning and tone.
To complete this task:
1. Read and understand the title carefully.
2. Identify any proper nouns or technical terms that should remain untranslated.
3. Translate the remaining words and phrases into the target_language, ensuring the meaning is preserved.
4. Adjust the translation if necessary to keep the length similar to the original title.
5. Review your translation for accuracy and naturalness in the target_language.
Provide your translation in the following JSON format:
<output>
{"translation": "Your target_language translation here"}
</output>
Here are three examples of correct translation
Original: {"title":"New Update for Minecraft Adds Underwater Temples", "target_language":"Spanish"}
Correct translation: {"translation": "Nueva actualización para Minecraft añade templos submarinos"}
Original: {"title":"Toyota announces revolutionary battery technology", "target_language":"French"}
Correct translation: {"translation": "Toyota annonce une technologie de batteries révolutionnaire"}
Original: {"title": "Heathrow fechado: paralisação de voos deve continuar nos próximos dias, diz gestora do aeroporto de Londres", "target_language": "English"}
Correct translation: {"translation": "Heathrow closed: flight disruption expected to continue in coming days, says London airport management"}
Remember to keep proper nouns like "Minecraft" and "Toyota" in their original form. Translate the title now and provide your answer in the specified JSON format.
TEXT
private def prompt_template
PROMPT_TEMPLATE
end
end
end
end