leonelquinteros
gotext
Go

Go (Golang) GNU gettext utilities package

Last updated Jul 6, 2026
505
Stars
66
Forks
6
Issues
+4
Stars/day
Attention Score
60
Language breakdown
Go 99.5%
Python 0.5%
Files click to expand
README

GitHub release MIT license Gotext build Go Report Card PkgGoDev

Gotext

GNU gettext utilities for Go.

gotext is a native Go implementation of the GNU Gettext utilities. It provides a thread-safe, flexible, and powerful way to handle internationalization (i18n) and localization (l10n) in your Go applications.


📖 Read the Full Documentation


Table of Contents

- Locale Object - Plural Forms - Dynamic Variables

Features

  • Native Go implementation of Gettext (no external dependencies).
  • Full support for PO and MO files.
  • Pluralization rules support via GNU Gettext plural-form expressions.
  • Message context support (msgctxt).
  • Thread-safe for concurrent use.
  • Works with UTF-8 by default.
  • Integrated CLI tool (xgotext) for string extraction.
  • Serializable objects for caching.
  • Seamless integration with Go's text/template and html/template.

Installation

go get github.com/leonelquinteros/gotext

Getting Started

For a quick start, use the package-level API:
package main

import ( "fmt" "github.com/leonelquinteros/gotext" )

func main() { // Configure package: locales path, language, and domain gotext.Configure("/path/to/locales", "en_US", "default")

// Simple translation fmt.Println(gotext.Get("Hello, world!"))

// Translation with variables fmt.Println(gotext.Get("Hello, %s!", "Gopher")) }

For more details, see the Getting Started Guide.


CLI Tool (xgotext)

gotext includes a command-line tool to extract translatable strings from your Go source code.

Install xgotext:

go install github.com/leonelquinteros/gotext/cli/xgotext@latest

Extract strings:

xgotext -p . -o locales/en_US/default.po

See the xgotext Documentation for full usage details.


Advanced Usage

Using Locale object

For managing multiple languages or domains independently:
l := gotext.NewLocale("/path/to/locales", "es_UY")
l.AddDomain("default")
fmt.Println(l.Get("Translate this"))

Use plural forms of translations

gotext handles complex pluralization rules defined in PO headers:
// GetN(singular, plural, quantity, args...)
fmt.Println(gotext.GetN("I have one apple.", "I have %d apples.", 5, 5))
See the Plural Forms Guide for more examples.

Using dynamic variables on translations

Supports standard fmt package syntax:
name := "John"
fmt.Println(gotext.Get("Hi, my name is %s", name))

Locales directories structure

The package expects a standard Gettext directory structure:
/path/to/locales
  /en_US
    /LC_MESSAGES
      default.po
  /es_ES
    default.po
It supports automatic language simplification (e.g., falling back from en_UK to en).

Contributing

We welcome contributions of all kinds!

License

gotext is released under the MIT License.
🔗 More in this category

© 2026 GitRepoTrend · leonelquinteros/gotext · Updated daily from GitHub