Nasty.Translation.Translator (Nasty v0.3.0)
View SourceCross-lingual translation using AST-based transformation.
Translates between English, Spanish, and Catalan by:
- Parsing source text to language-agnostic AST
- Transforming AST tokens and structure for target language
- Rendering AST in target language
This approach preserves syntactic structure and provides transparent, linguistically-motivated translations without neural models.
Supported Language Pairs
- English ↔ Spanish (en ↔ es)
- English ↔ Catalan (en ↔ ca)
- Spanish ↔ Catalan (es ↔ ca)
Examples
# Simple translation
iex> Translator.translate("The cat sleeps", :en, :es)
{:ok, "El gato duerme"}
# Automatic source language detection
iex> Translator.translate("El gato duerme", :auto, :en)
{:ok, "The cat sleeps"}
# With AST inspection
iex> {:ok, doc} = English.parse("The red car")
iex> Translator.translate_document(doc, :es)
{:ok, %Document{language: :es, ...}}Options
:preserve_structure- Keep original AST structure (default: true):handle_unknowns- Strategy for unknown words: :keep, :skip (default: :keep):debug- Return intermediate AST transformations (default: false)
Limitations
- Lexicon-based: Unknown words are passed through untranslated
- No context-based disambiguation (yet)
- Idioms require explicit entries in lexicon
- Gender assignment for English nouns uses defaults
Summary
Functions
Lists all supported language pairs.
Checks if a language pair is supported.
Translates text from source language to target language.
Translates an already-parsed document to target language.
Types
Functions
Lists all supported language pairs.
Examples
iex> Translator.supported_pairs()
[
{:en, :es}, {:es, :en},
{:en, :ca}, {:ca, :en},
{:es, :ca}, {:ca, :es}
]
Checks if a language pair is supported.
Examples
iex> Translator.supports?(:en, :es)
true
iex> Translator.supports?(:en, :fr)
false
@spec translate(String.t(), language(), language(), options()) :: {:ok, String.t()} | {:error, term()}
Translates text from source language to target language.
Examples
iex> Translator.translate("The cat sleeps", :en, :es)
{:ok, "El gato duerme"}
iex> Translator.translate("Hola mundo", :es, :en)
{:ok, "Hello world"}
iex> Translator.translate("El gat dorm", :ca, :es)
{:ok, "El gato duerme"}Options
:preserve_structure- Keep original AST structure (default: true):handle_unknowns- Strategy for unknown words: :keep, :skip (default: :keep)
@spec translate_document(Nasty.AST.Document.t(), language(), options()) :: {:ok, Nasty.AST.Document.t()} | {:error, term()}
Translates an already-parsed document to target language.
Useful when you want to inspect or modify the AST before/after translation.
Examples
iex> {:ok, doc} = English.parse("The cat sleeps")
iex> Translator.translate_document(doc, :es)
{:ok, %Document{language: :es, ...}}