Skip to content

levovix0/localize

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Mar 24, 2025
14bbc5c · Mar 24, 2025

History

18 Commits
Mar 24, 2025
Feb 14, 2024
Mar 24, 2025
Nov 24, 2021
Feb 14, 2024
Mar 24, 2025

Repository files navigation

Localize

sigui

Localize your applications at compile-time

app.nim

import localize

requireLocalesToBeTranslated ("ru", "")

echo tr"Hello, world"  # "Hello, world"
globalLocale = locale "ru"
echo tr"Hello, world"  # "Привет, мир"

when isMainModule:
  updateTranslations()  # traslations is readed and updated when compiling

translations/ru.json

{
  "app.nim": {
    "Hello, world": {
      "": "Привет, мир"
    }
  }
}
  • Static translations are generated for each nimble packege that uses localize, in package root directory

specifing context

"it is working!".tr          # same as "" context
"it is working!".tr("")      # "оно работает!"
"it is working!".tr("code")  # "он работает!"
{
  "app.nim": {
    "it is working!": {
      "": "оно работает!",
      "code": "он работает!"
    }
  }
}

formating

tr is auto-calling fmt

let name = stdin.readline
echo tr"Hi, {name}"
{
  "app.nim": {
    "Hi, {name}": {
      "": "Привет, {name}",
    }
  }
}

detecting system language

globalLocale[0] = systemLocale()
  • system locale values are based on linux's LANG env variable

dynamic translations

import json

globalLocale = (
  ("zh", ""),
  parseLocaleTable %*{
    "mypackage": {
      "src/myapp.nim": {
        "Hello, world": {
          "": "你好,世界",
        },
      },
    },
  }
)
  • Dynamic translations files are diffirent from static translations files: they contain table for modules
  • For now, dynamic translations are not formated

known issues

  • for now, dynamicly loaded translations cannot be formated at all

About

Localize your Nim apps at compile-time

Resources

Stars

Watchers

Forks

Languages