func init() { // bind app domain gettext.BindTextdomain("hello", "local", nil) gettext.Textdomain("hello") // $(LC_MESSAGES) or $(LANG) or empty fmt.Println(gettext.Gettext("Gettext in init.")) fmt.Println(gettext.PGettext("main.init", "Gettext in init.")) hi.SayHi() // Output(depends on local environment): // ? // ? // ? // ? // set simple chinese gettext.SetLocale("zh_CN") // simple chinese fmt.Println(gettext.Gettext("Gettext in init.")) fmt.Println(gettext.PGettext("main.init", "Gettext in init.")) hi.SayHi() // Output: // Init函数中的Gettext. // Init函数中的Gettext. // 来自"Hi"包的问候: 你好, 世界! // 来自"Hi"包的问候: 你好, 世界! }
// LoadTranslations loads translation files. getLanguageFn should return a language // string (e.g. 'en-US'). If getLanguageFn is nil, then the loadSystemLanguage function // is used, which uses the 'LANG' environment variable. func LoadTranslations(root string, getLanguageFn func() string) error { if getLanguageFn == nil { getLanguageFn = loadSystemLanguage } langStr := findLanguage(root, getLanguageFn) translationFiles := []string{ fmt.Sprintf("%s/%s/LC_MESSAGES/k8s.po", root, langStr), fmt.Sprintf("%s/%s/LC_MESSAGES/k8s.mo", root, langStr), } glog.V(3).Infof("Setting language to %s", langStr) // TODO: list the directory and load all files. buf := new(bytes.Buffer) w := zip.NewWriter(buf) // Make sure to check the error on Close. for _, file := range translationFiles { filename := "translations/" + file f, err := w.Create(file) if err != nil { return err } data, err := generated.Asset(filename) if err != nil { return err } if _, err := f.Write(data); err != nil { return nil } } if err := w.Close(); err != nil { return err } gettext.BindTextdomain("k8s", root+".zip", buf.Bytes()) gettext.Textdomain("k8s") gettext.SetLocale(langStr) return nil }
func run() error { gettext.BindTextdomain("lxd", "", nil) gettext.Textdomain("lxd") verbose := gnuflag.Bool("verbose", false, gettext.Gettext("Enables verbose mode.")) debug := gnuflag.Bool("debug", false, gettext.Gettext("Enables debug mode.")) forceLocal := gnuflag.Bool("force-local", false, gettext.Gettext("Enables debug mode.")) gnuflag.StringVar(&lxd.ConfigDir, "config", lxd.ConfigDir, gettext.Gettext("Alternate config directory.")) if len(os.Args) >= 3 && os.Args[1] == "config" && os.Args[2] == "profile" { fmt.Fprintf(os.Stderr, "`lxc config profile` is deprecated, please use `lxc profile`\n") os.Args = append(os.Args[:1], os.Args[2:]...) } if len(os.Args) >= 2 && (os.Args[1] == "-h" || os.Args[1] == "--help") { os.Args[1] = "help" } if len(os.Args) >= 2 && (os.Args[1] == "--all") { os.Args[1] = "help" os.Args = append(os.Args, "--all") } if len(os.Args) == 2 && os.Args[1] == "--version" { os.Args[1] = "version" } if len(os.Args) < 2 { commands["help"].run(nil, nil) os.Exit(1) } name := os.Args[1] cmd, ok := commands[name] if !ok { fmt.Fprintf(os.Stderr, gettext.Gettext("error: unknown command: %s\n"), name) commands["help"].run(nil, nil) os.Exit(1) } cmd.flags() gnuflag.Usage = func() { fmt.Fprintf(os.Stderr, gettext.Gettext("Usage: %s\n\nOptions:\n\n"), strings.TrimSpace(cmd.usage())) gnuflag.PrintDefaults() } os.Args = os.Args[1:] gnuflag.Parse(true) shared.SetLogger("", "", *verbose, *debug) var config *lxd.Config var err error if *forceLocal { config = &lxd.DefaultConfig } else { config, err = lxd.LoadConfig() if err != nil { return err } } certf := lxd.ConfigPath("client.crt") keyf := lxd.ConfigPath("client.key") if !*forceLocal && os.Args[0] != "help" && os.Args[0] != "version" && (!shared.PathExists(certf) || !shared.PathExists(keyf)) { fmt.Fprintf(os.Stderr, gettext.Gettext("Generating a client certificate. This may take a minute...\n")) err = shared.FindOrGenCert(certf, keyf) if err != nil { return err } fmt.Fprintf(os.Stderr, gettext.Gettext("If this is your first run, you will need to import images using the 'lxd-images' script.\n")) fmt.Fprintf(os.Stderr, gettext.Gettext("For example: 'lxd-images import ubuntu --alias ubuntu'.\n")) } err = cmd.run(config, gnuflag.Args()) if err == errArgs { fmt.Fprintf(os.Stderr, gettext.Gettext("error: %v\n%s"), err, cmd.usage()) os.Exit(1) } return err }
func setup(locale string, domain string, dir string) { gettext.SetLocale(locale) gettext.Textdomain(domain) gettext.BindTextdomain(domain, dir, nil) }
func run() error { gettext.BindTextdomain("lxd", "", nil) gettext.Textdomain("lxd") verbose := gnuflag.Bool("verbose", false, gettext.Gettext("Enables verbose mode.")) debug := gnuflag.Bool("debug", false, gettext.Gettext("Enables debug mode.")) forceLocal := gnuflag.Bool("force-local", false, gettext.Gettext("Force using the local unix socket.")) configDir := os.Getenv("LXD_CONF") if configDir != "" { lxd.ConfigDir = configDir } if len(os.Args) >= 3 && os.Args[1] == "config" && os.Args[2] == "profile" { fmt.Fprintf(os.Stderr, gettext.Gettext("`lxc config profile` is deprecated, please use `lxc profile`")+"\n") os.Args = append(os.Args[:1], os.Args[2:]...) } if len(os.Args) >= 2 && (os.Args[1] == "-h" || os.Args[1] == "--help") { os.Args[1] = "help" } if len(os.Args) >= 2 && (os.Args[1] == "--all") { os.Args[1] = "help" os.Args = append(os.Args, "--all") } if len(os.Args) == 2 && os.Args[1] == "--version" { os.Args[1] = "version" } if len(os.Args) < 2 { commands["help"].run(nil, nil) os.Exit(1) } var config *lxd.Config var err error if *forceLocal { config = &lxd.DefaultConfig } else { config, err = lxd.LoadConfig() if err != nil { return err } // One time migration from old config if config.DefaultRemote == "" { _, ok := config.Remotes["local"] if !ok { config.Remotes["local"] = lxd.LocalRemote } config.DefaultRemote = "local" lxd.SaveConfig(config) } } // This is quite impolite, but it seems gnuflag needs us to shift our // own exename out of the arguments before parsing them. However, this // is useful for execIfAlias, which wants to know exactly the command // line we received, and in some cases is called before this shift, and // in others after. So, let's save the original args. origArgs := os.Args name := os.Args[1] cmd, ok := commands[name] if !ok { execIfAliases(config, origArgs) fmt.Fprintf(os.Stderr, gettext.Gettext("error: unknown command: %s")+"\n", name) commands["help"].run(nil, nil) os.Exit(1) } cmd.flags() gnuflag.Usage = func() { fmt.Fprintf(os.Stderr, gettext.Gettext("Usage: %s")+"\n\n"+gettext.Gettext("Options:")+"\n\n", strings.TrimSpace(cmd.usage())) gnuflag.PrintDefaults() } os.Args = os.Args[1:] gnuflag.Parse(true) shared.SetLogger("", "", *verbose, *debug) certf := lxd.ConfigPath("client.crt") keyf := lxd.ConfigPath("client.key") if !*forceLocal && os.Args[0] != "help" && os.Args[0] != "version" && (!shared.PathExists(certf) || !shared.PathExists(keyf)) { fmt.Fprintf(os.Stderr, gettext.Gettext("Generating a client certificate. This may take a minute...")+"\n") err = shared.FindOrGenCert(certf, keyf) if err != nil { return err } fmt.Fprintf(os.Stderr, gettext.Gettext("If this is your first run, you will need to import images using the 'lxd-images' script.")+"\n") fmt.Fprintf(os.Stderr, gettext.Gettext("For example: 'lxd-images import ubuntu --alias ubuntu'.")+"\n") } err = cmd.run(config, gnuflag.Args()) if err == errArgs { /* If we got an error about invalid arguments, let's try to * expand this as an alias */ execIfAliases(config, origArgs) fmt.Fprintf(os.Stderr, gettext.Gettext("error: %v")+"\n%s\n", err, cmd.usage()) os.Exit(1) } return err }