in api/simultaneousinterpreter/translate_speech.go [81:133]
func (h *handler) translate(ctx context.Context, sourceLang, text string) (map[string]string, error) {
sourceLangTag, err := language.Parse(strings.Split(sourceLang, "-")[0])
if err != nil {
return nil, hd.Errorf(ctx,
http.StatusBadRequest,
"invalid language code",
"failed language.Parse: %w", err)
}
langs, err := h.getTranslateSupportedLanguages(ctx)
if err != nil {
return nil, hd.Wrapf("failed getTranslateSupportedLanguages: %w", err)
}
translations := map[string]string{}
mu := &sync.Mutex{}
eg := &errgroup.Group{}
for _, lang := range langs {
if sourceLangTag == lang.Tag {
translations[lang.Name] = text
continue
}
lang := lang
eg.Go(func() error {
resp, err := h.Translate.Translate(ctx, []string{text}, lang.Tag, &translate.Options{
Source: sourceLangTag,
Format: translate.Text,
})
if err != nil {
return hd.Errorf(ctx,
http.StatusInternalServerError,
http.StatusText(http.StatusInternalServerError),
"failed Translate.Translate: %w", err)
}
mu.Lock()
defer mu.Unlock()
translations[lang.Name] = resp[0].Text
return nil
})
}
if err := eg.Wait(); err != nil {
return nil, hd.Wrapf("failed to translate: %w", err)
}
return translations, nil
}