127 lines
4.2 KiB
Go
127 lines
4.2 KiB
Go
/*
|
|
Package gotext implements GNU gettext utilities.
|
|
|
|
Version 0.9.0 (stable)
|
|
|
|
For quick/simple translations you can use the package level functions directly.
|
|
|
|
import "github.com/leonelquinteros/gotext"
|
|
|
|
func main() {
|
|
// Configure package
|
|
gotext.Configure("/path/to/locales/root/dir", "en_UK", "domain-name")
|
|
|
|
// Translate text from default domain
|
|
println(gotext.Get("My text on 'domain-name' domain"))
|
|
|
|
// Translate text from a different domain without reconfigure
|
|
println(gotext.GetD("domain2", "Another text on a different domain"))
|
|
}
|
|
|
|
*/
|
|
package gotext
|
|
|
|
// Global environment variables
|
|
var (
|
|
// Default domain to look at when no domain is specified. Used by package level functions.
|
|
domain = "default"
|
|
|
|
// Language set.
|
|
language = "en_US"
|
|
|
|
// Path to library directory where all locale directories and translation files are.
|
|
library = "/tmp"
|
|
|
|
// Storage for package level methods
|
|
storage *Locale
|
|
)
|
|
|
|
// loadStorage creates a new Locale object at package level based on the Global variables settings.
|
|
// It's called automatically when trying to use Get or GetD methods.
|
|
func loadStorage(force bool) {
|
|
if storage == nil || force {
|
|
storage = NewLocale(library, language)
|
|
}
|
|
|
|
if _, ok := storage.domains[domain]; !ok || force {
|
|
storage.AddDomain(domain)
|
|
}
|
|
}
|
|
|
|
// GetDomain is the domain getter for the package configuration
|
|
func GetDomain() string {
|
|
return domain
|
|
}
|
|
|
|
// SetDomain sets the name for the domain to be used at package level.
|
|
// It reloads the corresponding translation file.
|
|
func SetDomain(dom string) {
|
|
domain = dom
|
|
loadStorage(true)
|
|
}
|
|
|
|
// GetLanguage is the language getter for the package configuration
|
|
func GetLanguage() string {
|
|
return language
|
|
}
|
|
|
|
// SetLanguage sets the language code to be used at package level.
|
|
// It reloads the corresponding translation file.
|
|
func SetLanguage(lang string) {
|
|
language = lang
|
|
loadStorage(true)
|
|
}
|
|
|
|
// GetLibrary is the library getter for the package configuration
|
|
func GetLibrary() string {
|
|
return library
|
|
}
|
|
|
|
// SetLibrary sets the root path for the loale directories and files to be used at package level.
|
|
// It reloads the corresponding translation file.
|
|
func SetLibrary(lib string) {
|
|
library = lib
|
|
loadStorage(true)
|
|
}
|
|
|
|
// Configure sets all configuration variables to be used at package level and reloads the corresponding translation file.
|
|
// It receives the library path, language code and domain name.
|
|
// This function is recommended to be used when changing more than one setting,
|
|
// as using each setter will introduce a I/O overhead because the translation file will be loaded after each set.
|
|
func Configure(lib, lang, dom string) {
|
|
library = lib
|
|
language = lang
|
|
domain = dom
|
|
|
|
loadStorage(true)
|
|
}
|
|
|
|
// Get uses the default domain globally set to return the corresponding translation of a given string.
|
|
// Supports optional parameters (vars... interface{}) to be inserted on the formatted string using the fmt.Printf syntax.
|
|
func Get(str string, vars ...interface{}) string {
|
|
return GetD(domain, str, vars...)
|
|
}
|
|
|
|
// GetN retrieves the (N)th plural form translation for the given string in the "default" domain.
|
|
// If n == 0, usually the singular form of the string is returned as defined in the PO file.
|
|
// Supports optional parameters (vars... interface{}) to be inserted on the formatted string using the fmt.Printf syntax.
|
|
func GetN(str, plural string, n int, vars ...interface{}) string {
|
|
return GetND("default", str, plural, n, vars...)
|
|
}
|
|
|
|
// GetD returns the corresponding translation in the given domain for a given string.
|
|
// Supports optional parameters (vars... interface{}) to be inserted on the formatted string using the fmt.Printf syntax.
|
|
func GetD(dom, str string, vars ...interface{}) string {
|
|
return GetND(dom, str, str, 0, vars...)
|
|
}
|
|
|
|
// GetND retrieves the (N)th plural form translation in the given domain for a given string.
|
|
// Supports optional parameters (vars... interface{}) to be inserted on the formatted string using the fmt.Printf syntax.
|
|
func GetND(dom, str, plural string, n int, vars ...interface{}) string {
|
|
// Try to load default package Locale storage
|
|
loadStorage(false)
|
|
|
|
// Return translation
|
|
return storage.GetND(dom, str, plural, n, vars...)
|
|
}
|