首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包i18n不翻译

包i18n不翻译
EN

Stack Overflow用户
提问于 2014-07-29 12:57:46
回答 1查看 523关注 0票数 1

我试着用金刚写我的第一个包裹。此包只是来自goi18b的包装器结构。请看下面的代码。

i18n.go

代码语言:javascript
复制
package i18n

import (
    "fmt"
    goi18n "github.com/nicksnyder/go-i18n/i18n"
)

var translateFunc goi18n.TranslateFunc

type I18n struct {
}

func NewI18n(filename string, language string) *I18n {
    goi18n.MustLoadTranslationFile(filename)
    translateFunc, _ = goi18n.Tfunc(language)
    return new(I18n)
}

func (i18n *I18n) ReadText(translationID string, args ...interface{}) string {
    fmt.Println(translateFunc("person_unread_email_count", 1, map[string]interface{}{
        "Person": "Bob",
    }))
    return translateFunc(translationID, args)
}

和测试文件i18n_test.go

代码语言:javascript
复制
package i18n

import "testing"
import "fmt"

var i18n *I18n = NewI18n("en-us.all.json", "en-US")

func TestComplexText(t *testing.T) {
    var str string
    str = i18n.ReadText("person_unread_email_count", 1, map[string]interface{}{
        "Person": "Bob",
    })
    fmt.Println(str)
}

作为输出我得到了

代码语言:javascript
复制
Bob has 1 unread email.
person_unread_email_count
PASS

如您所见,在i18n.go内部,文本将被翻译。

代码语言:javascript
复制
Bob has 1 unread email.

但是在i18n_test.go中,我希望得到同样的结果,但我得到了

代码语言:javascript
复制
person_unread_email_count

我不能配置,我在这里做错了!

更新:

当我将readtext函数更改为

代码语言:javascript
复制
func (i18n *I18n) ReadText(translationID string, args ...interface{}) string {
    fmt.Println(translateFunc(translationID, 1, map[string]interface{}{
        "Person": "Bob",
    }))
    fmt.Println(translateFunc(translationID, args))
    return translateFunc(translationID, args)
}

作为输出我得到了

代码语言:javascript
复制
Bob has 1 unread email.
person_unread_email_count

我认为错误发生在参数args ...interface{}上。当我传递参数args时

代码语言:javascript
复制
fmt.Println(translateFunc(translationID, args))

课文不需要翻译。但就像这样,这是要翻译的

代码语言:javascript
复制
fmt.Println(translateFunc(translationID, 1, map[string]interface{}{
    "Person": "Bob",
}))

为什么?

我忘了发json文件

代码语言:javascript
复制
[
  {
    "id": "d_days",
    "translation": {
      "one": "{{.Count}} day",
      "other": "{{.Count}} days"
    }
  },
  {
    "id": "my_height_in_meters",
    "translation": {
      "one": "I am {{.Count}} meter tall.",
      "other": "I am {{.Count}} meters tall."
    }
  },
  {
    "id": "person_greeting",
    "translation": "Hello {{.Person}}"
  },
  {
    "id": "person_unread_email_count",
    "translation": {
      "one": "{{.Person}} has {{.Count}} unread email.",
      "other": "{{.Person}} has {{.Count}} unread emails."
    }
  },
  {
    "id": "person_unread_email_count_timeframe",
    "translation": {
      "one": "{{.Person}} has {{.Count}} unread email in the past {{.Timeframe}}.",
      "other": "{{.Person}} has {{.Count}} unread emails in the past {{.Timeframe}}."
    }
  },
  {
    "id": "program_greeting",
    "translation": "Hello world"
  },
  {
    "id": "your_unread_email_count",
    "translation": {
      "one": "You have {{.Count}} unread email.",
      "other": "You have {{.Count}} unread emails."
    }
  }
]
EN

回答 1

Stack Overflow用户

发布于 2014-07-29 13:16:41

默认情况下,go test工具在成功时不会输出任何输出。您可以通过在运行测试时使用来自包logtesting函数和设置-v标志来覆盖这一点。

有关更多详细信息,请参阅标志

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25015884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档