Translations
Let's follow the Gettext section:
po/POTFILES
data/dev.geopjr.tinystats.desktop.in
data/dev.geopjr.tinystats.metainfo.xml.in
data/ui/app.uipo/LINGUAS
I can only do Greek at the moment, so that's what I'm going to add.
elGenerating the translation files
Let's run xgettext to gather all translatable strings:
$ xgettext --files-from=po/POTFILES --output=po/dev.geopjr.tinystats.potNow let's generate the Greek file:
$ msginit -i po/dev.geopjr.tinystats.pot -o po/el.po -l el_GR.utf8I'll go ahead and fill in po/el.po.
.mo binaries will be generated during install.
Code
Following the Gettext section, we are going to add gettext to our requires and add setlocale & textdomain to our prerequisites.cr
crystal
require "gettext"crystal
Gettext.setlocale(Gettext::LC::ALL, "")
Gettext.bindtextdomain("dev.geopjr.tinystats", {{env("TINY_LOCALE_LOCATION").nil? ? "/usr/share/locale" : env("TINY_LOCALE_LOCATION")}})
Gettext.textdomain("dev.geopjr.tinystats")Thankfully, most of the strings that need translation are in the UI file which gets translated automatically, but we still need to translate the title:
crystal
window.title = "Tiny Stats - #{Gettext.gettext(NOTEBOOK.tab_label_text(x).not_nil!)}"Lastly, we will place the thank_translators.cr script in data/scripts/ and add them in the translators section of the About dialog:
src/modules/prerequisites.cr
crystal
THANKS = {{run("../../data/scripts/thank_translators").stringify}}src/modules/functions/about_action.cr
crystal
Gtk.show_about_dialog(
APP.active_window,
name: "About Tiny Stats",
application: APP,
program_name: "Tiny Stats",
version: VERSION,
logo_icon_name: "dev.geopjr.tinystats",
copyright: "© 2021 Evangelos Paterakis",
website: "https://github.com/GeopJr/tiny-stats-template",
authors: ["Evangelos \"GeopJr\" Paterakis"],
artists: ["Evangelos \"GeopJr\" Paterakis"],
translator_credits: THANKS, # ++
)