Skip to content

yarigo/i18n

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

i18n

i18n is a package that helps you translate Go programs into multiple languages.

Features

  • plural

Installation

go install git.local/go/i18n@latest

How to use

First you must create a json language file (see Translation file structure for details).

Load all translation files and set a fallback language. If you don't need a fallback language, you can set it as language.Und.

i18n/en/main.json

[{ "id": "hello", "message": "Hello, world!" }]

i18n/ru/main.json

[{ "id": "hello", "message": "Здравствуй, Мир!" }]

main.go

package main

import (
  "fmt"
  "log"

  "github.com/yarigo/i18n"
  "golang.org/x/text/language"
)

func main() {
  // Create a new instance.
  t := i18n.New(&i18n.Config{Path: "./i18n", Fallback: language.Und})

  // Load all translation files.
  if err := t.Load(); err != nil {
    log.Fatalln(err.Error())
  }

  // Take printer for English language.
  en := t.Printer(language.English)
  // Take printer for Russian language.
  ru := t.Printer(language.Russian)

  // Print message.
  fmt.Println(en.Sprintf("hello"))
  // Print message.
  fmt.Println(ru.Sprintf("hello"))
}
$ go run main.go
Hello, world!
Здравствуй, Мир!

plural

A selector matches an argument if:

  • it is "other" or Other
  • it matches the plural form of the argument: "zero", "one", "two", "few", or "many", or the equivalent Form
  • it is of the form "=x" where x is an integer that matches the value of the argument.
  • it is of the form "<x" where x is an integer that is larger than the argument.

For example:

"rules": {
  "1": {
    "=0": "...",
    "one": "..."
  },
  "2": {
    ">10": "...",
    "other": "..."
  },
}

1 and 2 its a index of variable.

Translation file structure

One of the message or rules fields is required, but not both.

Without plural

[
  {
    "id": "unique message id",
    "message": "message text"
  }
]

With plural

[
  {
    "id": "unique message id",
    "rules": {
      "1": {
        "one": "first message id",
        "many": "message id %d"
      }
    }
  }
]

or

[
  {
    "id": "unique message id",
    "rules": {
      "2": {
        "one": "message id %d and its %d text message",
        "many": "message id %d and message text %d"
      }
    }
  }
]

1 and 2 are the number of the argument to use in the plural. If you only use the first argument, you can skip defining it like this:

[
  {
    "id": "unique message id",
    "rules": {
      "one": "first message id",
      "many": "message id %d"
    }
  }
]

About

I18n based by godoc.org/golang.org/x/text/message and godoc.org/golang.org/x/text/feature/plural pacakges.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors