1. Guia Pràctica: Azure AI Translator (Capa Gratuïta)
1.1. Introducció
Azure AI Translator és un servei de traducció automàtica neural que suporta més de 100 idiomes. Permet traduir text, detectar idiomes, transliterar (canviar sistema d'escriptura) i obtenir traduccions alternatives.
1.1.1. Límits de la capa gratuïta (F0)
- 2.000.000 caràcters/mes gratuïts per a traducció de text
- 250.000 caràcters/mes per a traducció de documents
- Sense cost de desplegament
1.2. Prerequisits
- Compte d'Azure actiu
- Python 3.8 o superior
1.3. Pas 1: Crear el recurs al portal d'Azure
- Ves a portal.azure.com
- Cerca "Translator"
- Fes clic a "Crear"
- Omple els camps:
- Grup de recursos:
rg-ia-practica
- Regió:
Global (recomanat) o West Europe
- Nom: un nom únic (p.ex.
translator-practica-2024)
- Nivell de preus: F0 (Gratuït)
- Fes clic a "Revisar i crear" → "Crear"
Copia:
- Clau (des de "Claus i punt de connexió")
- Regió (p.ex. westeurope o global)
L'endpoint de Translator és sempre: https://api.cognitive.microsofttranslator.com/
1.4. Pas 2: Instal·lar les dependències
El servei Translator s'usa directament via API REST, sense SDK específic addicional.
1.5. Pas 3: Traducció bàsica de text
Crea un fitxer translator_basic.py:
| Python |
|---|
| import requests
import json
TRANSLATOR_KEY = "<la-teva-clau>"
TRANSLATOR_REGION = "westeurope" # o "global"
ENDPOINT = "https://api.cognitive.microsofttranslator.com"
def traduir(text, idioma_desti, idioma_origen=None):
"""
Tradueix text a l'idioma de destí indicat.
Si no s'especifica idioma_origen, es detecta automàticament.
"""
url = f"{ENDPOINT}/translate"
params = {
"api-version": "3.0",
"to": idioma_desti
}
if idioma_origen:
params["from"] = idioma_origen
headers = {
"Ocp-Apim-Subscription-Key": TRANSLATOR_KEY,
"Ocp-Apim-Subscription-Region": TRANSLATOR_REGION,
"Content-Type": "application/json"
}
body = [{"text": text}]
response = requests.post(url, params=params, headers=headers, json=body)
result = response.json()
return result[0]["translations"][0]["text"]
# Exemples d'ús
textos = [
("Bon dia, com esteu?", "ca"),
("Hello, how are you?", "en"),
("Hola, ¿cómo estás?", "es"),
]
idiomes_desti = ["en", "fr", "de", "ja"]
for text, idioma_orig in textos:
print(f"\nOriginal ({idioma_orig}): {text}")
for idioma in idiomes_desti:
traduccio = traduir(text, idioma, idioma_origen=idioma_orig)
print(f" → {idioma}: {traduccio}")
|
1.6. Pas 4: Detecció d'idioma
| Python |
|---|
| import requests
TRANSLATOR_KEY = "<la-teva-clau>"
TRANSLATOR_REGION = "westeurope"
ENDPOINT = "https://api.cognitive.microsofttranslator.com"
def detectar_idioma(text):
url = f"{ENDPOINT}/detect"
headers = {
"Ocp-Apim-Subscription-Key": TRANSLATOR_KEY,
"Ocp-Apim-Subscription-Region": TRANSLATOR_REGION,
"Content-Type": "application/json"
}
body = [{"text": text}]
response = requests.post(url, params={"api-version": "3.0"}, headers=headers, json=body)
result = response.json()
return {
"idioma": result[0]["language"],
"confiança": result[0]["score"]
}
frases = [
"This is an English sentence.",
"Cette phrase est en français.",
"Diese Satz ist auf Deutsch.",
"この文は日本語です。",
"Aquesta frase és en català.",
"Esta frase es en castellano.",
]
print("=== DETECCIÓ D'IDIOMA ===")
for frase in frases:
info = detectar_idioma(frase)
print(f" '{frase[:40]}...' → {info['idioma']} (confiança: {info['confiança']:.2f})")
|
1.7. Pas 5: Traducció múltiple i transliteració
1.7.1. Traducció a múltiples idiomes alhora
| Python |
|---|
| import requests
TRANSLATOR_KEY = "<la-teva-clau>"
TRANSLATOR_REGION = "westeurope"
ENDPOINT = "https://api.cognitive.microsofttranslator.com"
def traduir_a_multiples(text, idiomes_desti):
"""Tradueix a múltiples idiomes en una sola crida (més eficient)."""
url = f"{ENDPOINT}/translate"
params = {
"api-version": "3.0",
"to": idiomes_desti # llista d'idiomes
}
headers = {
"Ocp-Apim-Subscription-Key": TRANSLATOR_KEY,
"Ocp-Apim-Subscription-Region": TRANSLATOR_REGION,
"Content-Type": "application/json"
}
body = [{"text": text}]
response = requests.post(url, params=params, headers=headers, json=body)
result = response.json()
traduccions = {}
for t in result[0]["translations"]:
traduccions[t["to"]] = t["text"]
return traduccions
text_original = "Benvinguts al curs d'Intel·ligència Artificial amb Azure!"
idiomes = ["en", "es", "fr", "de", "it", "pt", "ja", "zh-Hans"]
traduccions = traduir_a_multiples(text_original, idiomes)
print(f"Original (ca): {text_original}\n")
for idioma, text in traduccions.items():
print(f" {idioma}: {text}")
|
1.7.2. Transliteració (canvi de sistema d'escriptura)
| Python |
|---|
| import requests
TRANSLATOR_KEY = "<la-teva-clau>"
TRANSLATOR_REGION = "westeurope"
ENDPOINT = "https://api.cognitive.microsofttranslator.com"
def transliterar(text, idioma, script_origen, script_desti):
url = f"{ENDPOINT}/transliterate"
params = {
"api-version": "3.0",
"language": idioma,
"fromScript": script_origen,
"toScript": script_desti
}
headers = {
"Ocp-Apim-Subscription-Key": TRANSLATOR_KEY,
"Ocp-Apim-Subscription-Region": TRANSLATOR_REGION,
"Content-Type": "application/json"
}
body = [{"text": text}]
response = requests.post(url, params=params, headers=headers, json=body)
result = response.json()
return result[0]["text"]
# Japonès (hiragana → llatí)
text_japones = "こんにちは"
romanitzat = transliterar(text_japones, "ja", "jpan", "latn")
print(f"Japonès: {text_japones} → Romanitzat: {romanitzat}")
# Xinès simplificat → llatí (pinyin)
text_xines = "你好"
pinyin = transliterar(text_xines, "zh-Hans", "Hans", "latn")
print(f"Xinès: {text_xines} → Pinyin: {pinyin}")
|
1.8. Pas 6: Exemple complet — traductor de fitxers
| Python |
|---|
| import requests
import sys
TRANSLATOR_KEY = "<la-teva-clau>"
TRANSLATOR_REGION = "westeurope"
ENDPOINT = "https://api.cognitive.microsofttranslator.com"
def traduir_fitxer(fitxer_entrada, fitxer_sortida, idioma_desti):
"""Llegeix un fitxer de text i el tradueix línia per línia."""
headers = {
"Ocp-Apim-Subscription-Key": TRANSLATOR_KEY,
"Ocp-Apim-Subscription-Region": TRANSLATOR_REGION,
"Content-Type": "application/json"
}
with open(fitxer_entrada, "r", encoding="utf-8") as f:
linies = [l.strip() for l in f.readlines() if l.strip()]
# Enviar totes les línies en una sola petició (més eficient)
body = [{"text": linia} for linia in linies]
response = requests.post(
f"{ENDPOINT}/translate",
params={"api-version": "3.0", "to": idioma_desti},
headers=headers,
json=body
)
resultats = response.json()
with open(fitxer_sortida, "w", encoding="utf-8") as f:
for i, resultat in enumerate(resultats):
f.write(resultat["translations"][0]["text"] + "\n")
print(f"Traducció completada: {fitxer_sortida}")
print(f"Línies traduïdes: {len(linies)}")
# Exemple d'ús:
# traduir_fitxer("text_original.txt", "text_angles.txt", "en")
|
1.9. Exercicis proposats
- Nivell bàsic: Crea un script que tradueixi una llista de 20 paraules en català a 5 idiomes i les mostri en format de taula.
- Nivell mitjà: Implementa un detector d'idioma que, donat un fitxer amb frases en idiomes barrejats, les agrupe per idioma.
- Nivell avançat: Construeix una eina de traducció de subtítols (.srt) que mantingui el format de temps i tradueixi el text al idioma desitjat.
1.10. Errors habituals
| Error |
Causa |
Solució |
401 Unauthorized |
Clau incorrecta |
Verifica la clau al portal |
400 Bad Request |
Codi d'idioma incorrecte |
Consulta la llista d'idiomes suportats |
403 Forbidden |
Regió incorrecta a la capçalera |
Verifica Ocp-Apim-Subscription-Region |
429 Too Many Requests |
Massa peticions |
Afegeix time.sleep() entre crides |
1.11. Idiomes suportats més rellevants
| Codi |
Idioma |
ca |
Català |
es |
Castellà |
en |
Anglès |
fr |
Francès |
de |
Alemany |
it |
Italià |
pt |
Portuguès |
ja |
Japonès |
zh-Hans |
Xinès simplificat |
ar |
Àrab |
Per veure la llista completa: GET https://api.cognitive.microsofttranslator.com/languages?api-version=3.0
1.12. Recursos addicionals