在Go中使用“重复”键进行翻译功能Map,而不会过于重复或效率低下

798qvoo8  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(76)

我想用一个数据结构做一个go函数,它可以让我输入一个字符串和一种所需的语言,并得到一个翻译,每个翻译都以某种方式与其他翻译相连接。
这就是我想要的:

translateKeyword("es-US", "mathe") // output is "matemáticas"
translateKeyword("en-US", "matemáticas") // output is "math"
translateKeyword("de-DE", "math") // output is "mathe"

字符串
我已经在go中做了一个功能,如果你给予一个英语单词和一个想要的语言,你会得到一个翻译的输出。

func translateKeyword(lang, keyword string) string {
  keywordDictionary := map[string]map[string]string{
    "home": {
      "en-US": "home",
      "es-US": "inicio",
      "de-DE": "start",
    },
    "about": {
      "en-US": "about",
      "es-US": "conóceme",
      "de-DE": "über",
    },
    // more....
  }

  translation, ok := keywordDictionary[keyword][lang]
  if ok {
    return translation
  }
  return keyword
}
translateKeyword("de-DE", "about") // output is "über" 
translateKeyword("es-US", "über") // output is "über" :(


你也可以在下面放一个嵌套循环来找到你插入的任何关键字来找到英语单词,然后正常地浏览Map。你也可以一遍又一遍地重复这些键,这样西班牙语和德语就都成了键,但肯定有比这更好的方法。
我真正想要的是找到一种简单的方法,使任何翻译工作的关键。我想找到一种方法来做,而不必在底部做一个丑陋,低效的循环,或者不必将我所有的翻译分散开来,以防我想轻松地添加或删除一个新的集合。我能做些什么来让我的生活更轻松?

8yoxcaq7

8yoxcaq71#

给定您已经拥有的输入,您可以构建您想要的字典,例如:

func build_dict(in map[string]map[string]string) (out map[string]map[string]string) {
    out = make(map[string]map[string]string)
    for _, m := range in {
        for l1, w1 := range m {
            if out[l1] == nil {
                out[l1] = make(map[string]string)
            }
            for _, w2 := range m {
                out[l1][w2] = w1
            }
        }
    }
    return out
}

字符串
那你可以

var dictionary = build_dict(map[string]map[string]string{
    "home": {
        "en-US": "home",
        "es-US": "inicio",
        "de-DE": "start",
    },
    // ...
})


您的函数可以更新为:

func translateKeyword(lang, kw string) string {
    x, ok := dictionary[lang][kw]
    if ok {
        return x
    }
    return "<unknown>"
}


https://go.dev/play/p/9iIlAzLpwow
正如你所看到的,build_dict函数不需要map中的根键,所以你可以用一片map来实现同样的事情,即

[]map[string]string{{
    "en-US": "math",
    "es-US": "matemáticas",
    "de-DE": "mathe",
}, {
    "en-US": "about",
    "es-US": "conóceme",
    "de-DE": "über",
}}

相关问题