discourse-ai/lib/translation/short_text_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

41 lines
1.5 KiB
Ruby

# frozen_string_literal: true
module DiscourseAi
module Translation
class ShortTextTranslator < BaseTranslator
PROMPT_TEMPLATE = <<~TEXT.freeze
You are a translation service specializing in translating short pieces of text or a few words.
These words may be things like a name, description, or title. Adhere to the following guidelines:
1. Keep proper nouns and technical terms in their original language
2. Keep the translated content close to the original length
3. Translation maintains the original meaning
4. Preserving any Markdown, HTML elements, links, parenthesis, or newlines
Provide your translation in the following JSON format:
<output>
{"translation": "target_language translation here"}
</output>
Here are three examples of correct translation
Original: {"content":"Japan", "target_language":"Spanish"}
Correct translation: {"translation": "Japón"}
Original: {"name":"Cats and Dogs", "target_language":"Chinese"}
Correct translation: {"translation": "猫和狗"}
Original: {"name": "Q&A", "target_language": "Portuguese"}
Correct translation: {"translation": "Perguntas e Respostas"}
Remember to keep proper nouns like "Minecraft" and "Toyota" in their original form. Translate the text now and provide your answer in the specified JSON format.
TEXT
private def prompt_template
PROMPT_TEMPLATE
end
end
end
end