Improve translation fallback and scale UI
build-push / docker (push) Successful in 4m12s

This commit is contained in:
AI Assistant
2026-03-13 12:11:38 +09:00
parent 6852e07607
commit 4a51998cbd
2 changed files with 70 additions and 30 deletions
+50 -10
View File
@@ -8,6 +8,7 @@ import (
"io"
"mime"
"net/http"
neturl "net/url"
"strings"
"time"
)
@@ -201,15 +202,17 @@ func (g *GeminiService) TranslateQuery(query string) string {
}
rawText, err := g.generateText(body)
if err != nil {
return strings.TrimSpace(query)
if err == nil {
translated := sanitizePlainEnglishLine(rawText)
if translated != "" && !strings.EqualFold(translated, strings.TrimSpace(query)) {
return translated
}
}
translated := sanitizePlainEnglishLine(rawText)
if translated == "" {
return strings.TrimSpace(query)
if translated, err := g.translateViaGoogle(query); err == nil && translated != "" {
return translated
}
return translated
return strings.TrimSpace(query)
}
func (g *GeminiService) generateText(body map[string]any) (string, error) {
@@ -464,10 +467,6 @@ func fallbackQueryExpansion(originalQuery, englishQuery string) []string {
base + " 4k footage",
base + " cinematic b-roll",
}
if strings.TrimSpace(originalQuery) != "" && !strings.EqualFold(strings.TrimSpace(originalQuery), strings.TrimSpace(englishQuery)) {
candidates = append(candidates, strings.TrimSpace(originalQuery))
}
seen := map[string]bool{}
queries := make([]string, 0, len(candidates))
for _, item := range candidates {
@@ -519,3 +518,44 @@ func looksMostlyASCII(text string) bool {
}
return ascii >= len(runes)*8/10
}
func (g *GeminiService) translateViaGoogle(query string) (string, error) {
endpoint := "https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=t&q=" + neturl.QueryEscape(query)
resp, err := g.Client.Get(endpoint)
if err != nil {
return "", err
}
defer resp.Body.Close()
if resp.StatusCode >= 300 {
return "", fmt.Errorf("google translate fallback returned status %d", resp.StatusCode)
}
var payload []any
if err := json.NewDecoder(resp.Body).Decode(&payload); err != nil {
return "", err
}
if len(payload) == 0 {
return "", fmt.Errorf("google translate fallback returned no payload")
}
top, ok := payload[0].([]any)
if !ok {
return "", fmt.Errorf("google translate fallback returned unexpected payload")
}
var builder strings.Builder
for _, part := range top {
segment, ok := part.([]any)
if !ok || len(segment) == 0 {
continue
}
if text, ok := segment[0].(string); ok {
builder.WriteString(text)
}
}
translated := strings.TrimSpace(builder.String())
if translated == "" {
return "", fmt.Errorf("google translate fallback returned empty translation")
}
return translated, nil
}