i18n/lang.go
package i18n
import (
"os"
"golang.org/x/text/language"
"golang.org/x/text/message"
)
var defaultPrinter = message.NewPrinter(language.English)
func init() {
for _, lang := range langs {
for _, l := range lang.List {
message.SetString(l.Lang, lang.Key, l.Value)
}
}
setDefaultLanguage()
}
func setDefaultLanguage() {
var tag language.Tag
switch os.Getenv("BOBO_LANG") {
case "ja":
tag = language.Japanese
default:
tag = language.English
}
defaultPrinter = message.NewPrinter(tag)
}
func Message(key string, args ...interface{}) string {
return defaultPrinter.Sprintf(key, args...)
}
func CommaNumber(n int) string {
return defaultPrinter.Sprintf("%d", n)
}
var langs = []translation{
// AWSCost
{Key: "Invalid date format: [%s]", List: []translationData{
{language.Japanese, "日付の指定が不正です: [%s]"},
}},
{Key: "Getting costs on [%s]...", List: []translationData{
{language.Japanese, "[%s] のコストを取得中..."},
}},
{Key: "[AWS Estimate Costs] %s", List: []translationData{
{language.Japanese, "[AWS概算コスト] %s"},
}},
// Merge
{Key: "No!", List: []translationData{
{language.Japanese, "だが断る。"},
}},
{Key: "Set Two URLs", List: []translationData{
{language.Japanese, "URLを2つセットしてください"},
}},
{Key: "Invalid URL. It must begin with [http/https]", List: []translationData{
{language.Japanese, "[http/https] で始まるURLを指定してください"},
}},
{Key: "Merging...", List: []translationData{
{language.Japanese, "マージ中..."},
}},
// Calendar
{Key: "[AllDay] [%s - %s]", List: []translationData{
{language.Japanese, "【終日】[%s - %s]"},
}},
{Key: "Getting events of [%s] ...", List: []translationData{
{language.Japanese, "[%s] の予定を確認中..."},
}},
{Key: "Target format is invalid, use @mention or correct email address.", List: []translationData{
{language.Japanese, "@メンション か 正しいメールアドレス を指定してください"},
}},
// Where
{Key: "Getting location of [%s] ...", List: []translationData{
{language.Japanese, "[%s] の場所を確認中..."},
}},
{Key: "Somewhere around there", List: []translationData{
{language.Japanese, "そのへんにいそうです"},
}},
{Key: "Doing [%s] in somewhere around there (%s - %s)", List: []translationData{
{language.Japanese, "どこかで %s してそうです (%s - %s)"},
}},
{Key: "[%s] | Doing [%s] at [%s] (%s - %s)", List: []translationData{
{language.Japanese, "【%s】 | %[3]s で %[2]s してそうです (%s - %s)"},
}},
{Key: "prev", List: []translationData{
{language.Japanese, "前"},
}},
{Key: "next", List: []translationData{
{language.Japanese, "次"},
}},
{Key: "now", List: []translationData{
{language.Japanese, "今"},
}},
{Key: "all-day", List: []translationData{
{language.Japanese, "終日"},
}},
{Key: "[AllDay] [%s - %s]", List: []translationData{
{language.Japanese, "【終日】[%s - %s]"},
}},
{Key: "error: %s", List: []translationData{
{language.Japanese, "エラーが発生しました: %s"},
}},
{Key: "Unexpected response: %+v", List: []translationData{
{language.Japanese, "想定外のレスポンスです: %+v"},
}},
{Key: `Begin!
{{ if .history }}
Previous conversation history:
{{.history}}
{{ end }}
New input: {{.input}}
{{ if .agent_scratchpad }}
Thought:{{.agent_scratchpad}}
{{ end }}`, List: []translationData{
{language.Japanese, `開始!ここからの会話は全て日本語で行います。返答は日本語で回答してください。
ただし回答は必ず "AI:" から始めてください。
例: AI: こんにちは
{{ if .history }}
以前のチャット履歴
{{.history}}
{{ end }}
新しいインプット: {{.input}}
{{ if .agent_scratchpad }}
Thought:{{.agent_scratchpad}}
{{ end }}`},
}},
}
type translation struct {
Key string
List []translationData
}
type translationData struct {
Lang language.Tag
Value string
}