MAESTRO: i18n: extract hard-coded strings from internal/tools/spotify/spotify.go

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Kayvan Sylvan
2026-02-14 00:54:12 -08:00
parent 7839ae6fa7
commit 0ceb639c9d
11 changed files with 164 additions and 24 deletions

View File

@@ -396,5 +396,19 @@
"extension_execution_timed_out": "Ausführung nach %v abgelaufen",
"extension_execution_failed_err": "Ausführung fehlgeschlagen: %w\nerr: %s",
"extension_failed_read_output_file": "Ausgabedatei konnte nicht gelesen werden: %w",
"extension_failed_get_output_path": "Ausgabepfad konnte nicht ermittelt werden: %w\nerr: %s"
"extension_failed_get_output_path": "Ausgabepfad konnte nicht ermittelt werden: %w\nerr: %s",
"spotify_failed_create_token_request": "Token-Anfrage konnte nicht erstellt werden: %w",
"spotify_failed_request_access_token": "Zugriffstoken konnte nicht angefordert werden: %w",
"spotify_failed_get_access_token": "Zugriffstoken konnte nicht abgerufen werden: Status %d, Antwort: %s",
"spotify_failed_decode_token_response": "Token-Antwort konnte nicht dekodiert werden: %w",
"spotify_failed_create_request": "Anfrage konnte nicht erstellt werden: %w",
"spotify_failed_execute_request": "Anfrage konnte nicht ausgeführt werden: %w",
"spotify_failed_read_response_body": "Antwortinhalt konnte nicht gelesen werden: %w",
"spotify_api_request_failed": "API-Anfrage fehlgeschlagen: Status %d, Antwort: %s",
"spotify_failed_parse_show_metadata": "Show-Metadaten konnten nicht analysiert werden: %w",
"spotify_failed_parse_episode_metadata": "Episoden-Metadaten konnten nicht analysiert werden: %w",
"spotify_search_failed": "Suche fehlgeschlagen: %w",
"spotify_failed_parse_search_results": "Suchergebnisse konnten nicht analysiert werden: %w",
"spotify_failed_get_show_episodes": "Show-Episoden konnten nicht abgerufen werden: %w",
"spotify_failed_parse_episodes": "Episoden konnten nicht analysiert werden: %w"
}

View File

@@ -396,5 +396,19 @@
"extension_execution_timed_out": "execution timed out after %v",
"extension_execution_failed_err": "execution failed: %w\nerr: %s",
"extension_failed_read_output_file": "failed to read output file: %w",
"extension_failed_get_output_path": "failed to get output path: %w\nerr: %s"
"extension_failed_get_output_path": "failed to get output path: %w\nerr: %s",
"spotify_failed_create_token_request": "failed to create token request: %w",
"spotify_failed_request_access_token": "failed to request access token: %w",
"spotify_failed_get_access_token": "failed to get access token: status %d, body: %s",
"spotify_failed_decode_token_response": "failed to decode token response: %w",
"spotify_failed_create_request": "failed to create request: %w",
"spotify_failed_execute_request": "failed to execute request: %w",
"spotify_failed_read_response_body": "failed to read response body: %w",
"spotify_api_request_failed": "API request failed: status %d, body: %s",
"spotify_failed_parse_show_metadata": "failed to parse show metadata: %w",
"spotify_failed_parse_episode_metadata": "failed to parse episode metadata: %w",
"spotify_search_failed": "search failed: %w",
"spotify_failed_parse_search_results": "failed to parse search results: %w",
"spotify_failed_get_show_episodes": "failed to get show episodes: %w",
"spotify_failed_parse_episodes": "failed to parse episodes: %w"
}

View File

@@ -396,5 +396,19 @@
"extension_execution_timed_out": "la ejecución expiró después de %v",
"extension_execution_failed_err": "la ejecución falló: %w\nerr: %s",
"extension_failed_read_output_file": "no se pudo leer el archivo de salida: %w",
"extension_failed_get_output_path": "no se pudo obtener la ruta de salida: %w\nerr: %s"
"extension_failed_get_output_path": "no se pudo obtener la ruta de salida: %w\nerr: %s",
"spotify_failed_create_token_request": "no se pudo crear la solicitud de token: %w",
"spotify_failed_request_access_token": "no se pudo solicitar el token de acceso: %w",
"spotify_failed_get_access_token": "no se pudo obtener el token de acceso: estado %d, respuesta: %s",
"spotify_failed_decode_token_response": "no se pudo decodificar la respuesta del token: %w",
"spotify_failed_create_request": "no se pudo crear la solicitud: %w",
"spotify_failed_execute_request": "no se pudo ejecutar la solicitud: %w",
"spotify_failed_read_response_body": "no se pudo leer el cuerpo de la respuesta: %w",
"spotify_api_request_failed": "la solicitud a la API falló: estado %d, respuesta: %s",
"spotify_failed_parse_show_metadata": "no se pudieron analizar los metadatos del programa: %w",
"spotify_failed_parse_episode_metadata": "no se pudieron analizar los metadatos del episodio: %w",
"spotify_search_failed": "la búsqueda falló: %w",
"spotify_failed_parse_search_results": "no se pudieron analizar los resultados de búsqueda: %w",
"spotify_failed_get_show_episodes": "no se pudieron obtener los episodios del programa: %w",
"spotify_failed_parse_episodes": "no se pudieron analizar los episodios: %w"
}

View File

@@ -388,5 +388,19 @@
"extension_execution_timed_out": "اجرا پس از %v منقضی شد",
"extension_execution_failed_err": "اجرا ناموفق بود: %w\nerr: %s",
"extension_failed_read_output_file": "خواندن فایل خروجی ناموفق بود: %w",
"extension_failed_get_output_path": "دریافت مسیر خروجی ناموفق بود: %w\nerr: %s"
"extension_failed_get_output_path": "دریافت مسیر خروجی ناموفق بود: %w\nerr: %s",
"spotify_failed_create_token_request": "ایجاد درخواست توکن ناموفق بود: %w",
"spotify_failed_request_access_token": "درخواست توکن دسترسی ناموفق بود: %w",
"spotify_failed_get_access_token": "دریافت توکن دسترسی ناموفق بود: وضعیت %d، پاسخ: %s",
"spotify_failed_decode_token_response": "رمزگشایی پاسخ توکن ناموفق بود: %w",
"spotify_failed_create_request": "ایجاد درخواست ناموفق بود: %w",
"spotify_failed_execute_request": "اجرای درخواست ناموفق بود: %w",
"spotify_failed_read_response_body": "خواندن متن پاسخ ناموفق بود: %w",
"spotify_api_request_failed": "درخواست API ناموفق بود: وضعیت %d، پاسخ: %s",
"spotify_failed_parse_show_metadata": "تجزیه فراداده برنامه ناموفق بود: %w",
"spotify_failed_parse_episode_metadata": "تجزیه فراداده قسمت ناموفق بود: %w",
"spotify_search_failed": "جستجو ناموفق بود: %w",
"spotify_failed_parse_search_results": "تجزیه نتایج جستجو ناموفق بود: %w",
"spotify_failed_get_show_episodes": "دریافت قسمت‌های برنامه ناموفق بود: %w",
"spotify_failed_parse_episodes": "تجزیه قسمت‌ها ناموفق بود: %w"
}

View File

@@ -396,5 +396,19 @@
"extension_execution_timed_out": "l'exécution a expiré après %v",
"extension_execution_failed_err": "l'exécution a échoué : %w\nerr : %s",
"extension_failed_read_output_file": "impossible de lire le fichier de sortie : %w",
"extension_failed_get_output_path": "impossible d'obtenir le chemin de sortie : %w\nerr : %s"
"extension_failed_get_output_path": "impossible d'obtenir le chemin de sortie : %w\nerr : %s",
"spotify_failed_create_token_request": "impossible de créer la requête de token : %w",
"spotify_failed_request_access_token": "impossible de demander le jeton d'accès : %w",
"spotify_failed_get_access_token": "impossible d'obtenir le jeton d'accès : statut %d, réponse : %s",
"spotify_failed_decode_token_response": "impossible de décoder la réponse du token : %w",
"spotify_failed_create_request": "impossible de créer la requête : %w",
"spotify_failed_execute_request": "impossible d'exécuter la requête : %w",
"spotify_failed_read_response_body": "impossible de lire le corps de la réponse : %w",
"spotify_api_request_failed": "la requête API a échoué : statut %d, réponse : %s",
"spotify_failed_parse_show_metadata": "impossible d'analyser les métadonnées de l'émission : %w",
"spotify_failed_parse_episode_metadata": "impossible d'analyser les métadonnées de l'épisode : %w",
"spotify_search_failed": "la recherche a échoué : %w",
"spotify_failed_parse_search_results": "impossible d'analyser les résultats de recherche : %w",
"spotify_failed_get_show_episodes": "impossible de récupérer les épisodes de l'émission : %w",
"spotify_failed_parse_episodes": "impossible d'analyser les épisodes : %w"
}

View File

@@ -396,5 +396,19 @@
"extension_execution_timed_out": "esecuzione scaduta dopo %v",
"extension_execution_failed_err": "esecuzione fallita: %w\nerr: %s",
"extension_failed_read_output_file": "impossibile leggere il file di output: %w",
"extension_failed_get_output_path": "impossibile ottenere il percorso di output: %w\nerr: %s"
"extension_failed_get_output_path": "impossibile ottenere il percorso di output: %w\nerr: %s",
"spotify_failed_create_token_request": "impossibile creare la richiesta del token: %w",
"spotify_failed_request_access_token": "impossibile richiedere il token di accesso: %w",
"spotify_failed_get_access_token": "impossibile ottenere il token di accesso: stato %d, risposta: %s",
"spotify_failed_decode_token_response": "impossibile decodificare la risposta del token: %w",
"spotify_failed_create_request": "impossibile creare la richiesta: %w",
"spotify_failed_execute_request": "impossibile eseguire la richiesta: %w",
"spotify_failed_read_response_body": "impossibile leggere il corpo della risposta: %w",
"spotify_api_request_failed": "richiesta API fallita: stato %d, risposta: %s",
"spotify_failed_parse_show_metadata": "impossibile analizzare i metadati dello show: %w",
"spotify_failed_parse_episode_metadata": "impossibile analizzare i metadati dell'episodio: %w",
"spotify_search_failed": "ricerca fallita: %w",
"spotify_failed_parse_search_results": "impossibile analizzare i risultati della ricerca: %w",
"spotify_failed_get_show_episodes": "impossibile ottenere gli episodi dello show: %w",
"spotify_failed_parse_episodes": "impossibile analizzare gli episodi: %w"
}

View File

@@ -396,5 +396,19 @@
"extension_execution_timed_out": "%v 後に実行がタイムアウトしました",
"extension_execution_failed_err": "実行に失敗しました: %w\nerr: %s",
"extension_failed_read_output_file": "出力ファイルの読み取りに失敗しました: %w",
"extension_failed_get_output_path": "出力パスの取得に失敗しました: %w\nerr: %s"
"extension_failed_get_output_path": "出力パスの取得に失敗しました: %w\nerr: %s",
"spotify_failed_create_token_request": "トークンリクエストの作成に失敗しました: %w",
"spotify_failed_request_access_token": "アクセストークンのリクエストに失敗しました: %w",
"spotify_failed_get_access_token": "アクセストークンの取得に失敗しました: ステータス %d、レスポンス: %s",
"spotify_failed_decode_token_response": "トークンレスポンスのデコードに失敗しました: %w",
"spotify_failed_create_request": "リクエストの作成に失敗しました: %w",
"spotify_failed_execute_request": "リクエストの実行に失敗しました: %w",
"spotify_failed_read_response_body": "レスポンスボディの読み取りに失敗しました: %w",
"spotify_api_request_failed": "APIリクエストが失敗しました: ステータス %d、レスポンス: %s",
"spotify_failed_parse_show_metadata": "番組メタデータの解析に失敗しました: %w",
"spotify_failed_parse_episode_metadata": "エピソードメタデータの解析に失敗しました: %w",
"spotify_search_failed": "検索に失敗しました: %w",
"spotify_failed_parse_search_results": "検索結果の解析に失敗しました: %w",
"spotify_failed_get_show_episodes": "番組エピソードの取得に失敗しました: %w",
"spotify_failed_parse_episodes": "エピソードの解析に失敗しました: %w"
}

View File

@@ -396,5 +396,19 @@
"extension_execution_timed_out": "execução expirou após %v",
"extension_execution_failed_err": "execução falhou: %w\nerr: %s",
"extension_failed_read_output_file": "falha ao ler o arquivo de saída: %w",
"extension_failed_get_output_path": "falha ao obter o caminho de saída: %w\nerr: %s"
"extension_failed_get_output_path": "falha ao obter o caminho de saída: %w\nerr: %s",
"spotify_failed_create_token_request": "falha ao criar a solicitação de token: %w",
"spotify_failed_request_access_token": "falha ao solicitar o token de acesso: %w",
"spotify_failed_get_access_token": "falha ao obter o token de acesso: status %d, resposta: %s",
"spotify_failed_decode_token_response": "falha ao decodificar a resposta do token: %w",
"spotify_failed_create_request": "falha ao criar a solicitação: %w",
"spotify_failed_execute_request": "falha ao executar a solicitação: %w",
"spotify_failed_read_response_body": "falha ao ler o corpo da resposta: %w",
"spotify_api_request_failed": "a solicitação da API falhou: status %d, resposta: %s",
"spotify_failed_parse_show_metadata": "falha ao analisar os metadados do programa: %w",
"spotify_failed_parse_episode_metadata": "falha ao analisar os metadados do episódio: %w",
"spotify_search_failed": "a pesquisa falhou: %w",
"spotify_failed_parse_search_results": "falha ao analisar os resultados da pesquisa: %w",
"spotify_failed_get_show_episodes": "falha ao obter os episódios do programa: %w",
"spotify_failed_parse_episodes": "falha ao analisar os episódios: %w"
}

View File

@@ -396,5 +396,19 @@
"extension_execution_timed_out": "execução expirou após %v",
"extension_execution_failed_err": "execução falhou: %w\nerr: %s",
"extension_failed_read_output_file": "falha ao ler o ficheiro de saída: %w",
"extension_failed_get_output_path": "falha ao obter o caminho de saída: %w\nerr: %s"
"extension_failed_get_output_path": "falha ao obter o caminho de saída: %w\nerr: %s",
"spotify_failed_create_token_request": "falha ao criar o pedido de token: %w",
"spotify_failed_request_access_token": "falha ao solicitar o token de acesso: %w",
"spotify_failed_get_access_token": "falha ao obter o token de acesso: estado %d, resposta: %s",
"spotify_failed_decode_token_response": "falha ao descodificar a resposta do token: %w",
"spotify_failed_create_request": "falha ao criar o pedido: %w",
"spotify_failed_execute_request": "falha ao executar o pedido: %w",
"spotify_failed_read_response_body": "falha ao ler o corpo da resposta: %w",
"spotify_api_request_failed": "o pedido à API falhou: estado %d, resposta: %s",
"spotify_failed_parse_show_metadata": "falha ao analisar os metadados do programa: %w",
"spotify_failed_parse_episode_metadata": "falha ao analisar os metadados do episódio: %w",
"spotify_search_failed": "a pesquisa falhou: %w",
"spotify_failed_parse_search_results": "falha ao analisar os resultados da pesquisa: %w",
"spotify_failed_get_show_episodes": "falha ao obter os episódios do programa: %w",
"spotify_failed_parse_episodes": "falha ao analisar os episódios: %w"
}

View File

@@ -396,5 +396,19 @@
"extension_execution_timed_out": "执行在 %v 后超时",
"extension_execution_failed_err": "执行失败:%w\nerr%s",
"extension_failed_read_output_file": "读取输出文件失败:%w",
"extension_failed_get_output_path": "获取输出路径失败:%w\nerr%s"
"extension_failed_get_output_path": "获取输出路径失败:%w\nerr%s",
"spotify_failed_create_token_request": "创建令牌请求失败:%w",
"spotify_failed_request_access_token": "请求访问令牌失败:%w",
"spotify_failed_get_access_token": "获取访问令牌失败:状态 %d响应%s",
"spotify_failed_decode_token_response": "解码令牌响应失败:%w",
"spotify_failed_create_request": "创建请求失败:%w",
"spotify_failed_execute_request": "执行请求失败:%w",
"spotify_failed_read_response_body": "读取响应正文失败:%w",
"spotify_api_request_failed": "API 请求失败:状态 %d响应%s",
"spotify_failed_parse_show_metadata": "解析节目元数据失败:%w",
"spotify_failed_parse_episode_metadata": "解析剧集元数据失败:%w",
"spotify_search_failed": "搜索失败:%w",
"spotify_failed_parse_search_results": "解析搜索结果失败:%w",
"spotify_failed_get_show_episodes": "获取节目剧集失败:%w",
"spotify_failed_parse_episodes": "解析剧集失败:%w"
}

View File

@@ -98,7 +98,7 @@ func (s *Spotify) refreshAccessToken() error {
req, err := http.NewRequest("POST", tokenURL, strings.NewReader(data.Encode()))
if err != nil {
return fmt.Errorf("failed to create token request: %w", err)
return fmt.Errorf(i18n.T("spotify_failed_create_token_request"), err)
}
// Set Basic Auth header with Client ID and Secret
@@ -108,13 +108,13 @@ func (s *Spotify) refreshAccessToken() error {
resp, err := s.httpClient.Do(req)
if err != nil {
return fmt.Errorf("failed to request access token: %w", err)
return fmt.Errorf(i18n.T("spotify_failed_request_access_token"), err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
body, _ := io.ReadAll(resp.Body)
return fmt.Errorf("failed to get access token: status %d, body: %s", resp.StatusCode, string(body))
return fmt.Errorf(i18n.T("spotify_failed_get_access_token"), resp.StatusCode, string(body))
}
var tokenResp struct {
@@ -124,7 +124,7 @@ func (s *Spotify) refreshAccessToken() error {
}
if err := json.NewDecoder(resp.Body).Decode(&tokenResp); err != nil {
return fmt.Errorf("failed to decode token response: %w", err)
return fmt.Errorf(i18n.T("spotify_failed_decode_token_response"), err)
}
s.tokenMutex.Lock()
@@ -145,7 +145,7 @@ func (s *Spotify) doRequest(method, endpoint string) ([]byte, error) {
reqURL := apiBaseURL + endpoint
req, err := http.NewRequest(method, reqURL, nil)
if err != nil {
return nil, fmt.Errorf("failed to create request: %w", err)
return nil, fmt.Errorf(i18n.T("spotify_failed_create_request"), err)
}
s.tokenMutex.RLock()
@@ -154,17 +154,17 @@ func (s *Spotify) doRequest(method, endpoint string) ([]byte, error) {
resp, err := s.httpClient.Do(req)
if err != nil {
return nil, fmt.Errorf("failed to execute request: %w", err)
return nil, fmt.Errorf(i18n.T("spotify_failed_execute_request"), err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("failed to read response body: %w", err)
return nil, fmt.Errorf(i18n.T("spotify_failed_read_response_body"), err)
}
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("API request failed: status %d, body: %s", resp.StatusCode, string(body))
return nil, fmt.Errorf(i18n.T("spotify_api_request_failed"), resp.StatusCode, string(body))
}
return body, nil
@@ -249,7 +249,7 @@ func (s *Spotify) GetShowMetadata(showId string) (*ShowMetadata, error) {
}
if err := json.Unmarshal(body, &resp); err != nil {
return nil, fmt.Errorf("failed to parse show metadata: %w", err)
return nil, fmt.Errorf(i18n.T("spotify_failed_parse_show_metadata"), err)
}
if resp.Id == "" {
@@ -303,7 +303,7 @@ func (s *Spotify) GetEpisodeMetadata(episodeId string) (*EpisodeMetadata, error)
}
if err := json.Unmarshal(body, &resp); err != nil {
return nil, fmt.Errorf("failed to parse episode metadata: %w", err)
return nil, fmt.Errorf(i18n.T("spotify_failed_parse_episode_metadata"), err)
}
if resp.Id == "" {
@@ -341,7 +341,7 @@ func (s *Spotify) SearchShows(query string, limit int) (*SearchResult, error) {
endpoint := fmt.Sprintf("/search?q=%s&type=show&limit=%d", url.QueryEscape(query), limit)
body, err := s.doRequest("GET", endpoint)
if err != nil {
return nil, fmt.Errorf("search failed: %w", err)
return nil, fmt.Errorf(i18n.T("spotify_search_failed"), err)
}
var resp struct {
@@ -365,7 +365,7 @@ func (s *Spotify) SearchShows(query string, limit int) (*SearchResult, error) {
}
if err := json.Unmarshal(body, &resp); err != nil {
return nil, fmt.Errorf("failed to parse search results: %w", err)
return nil, fmt.Errorf(i18n.T("spotify_failed_parse_search_results"), err)
}
result := &SearchResult{
@@ -401,7 +401,7 @@ func (s *Spotify) GetShowEpisodes(showId string, limit int) ([]EpisodeMetadata,
endpoint := fmt.Sprintf("/shows/%s/episodes?limit=%d", showId, limit)
body, err := s.doRequest("GET", endpoint)
if err != nil {
return nil, fmt.Errorf("failed to get show episodes: %w", err)
return nil, fmt.Errorf(i18n.T("spotify_failed_get_show_episodes"), err)
}
var resp struct {
@@ -424,7 +424,7 @@ func (s *Spotify) GetShowEpisodes(showId string, limit int) ([]EpisodeMetadata,
}
if err := json.Unmarshal(body, &resp); err != nil {
return nil, fmt.Errorf("failed to parse episodes: %w", err)
return nil, fmt.Errorf(i18n.T("spotify_failed_parse_episodes"), err)
}
episodes := make([]EpisodeMetadata, 0, len(resp.Items))