changeset 306:6a7bca547f9a

make: add NLS support
author David Demelier <markand@malikania.fr>
date Mon, 28 Jun 2021 21:08:11 +0200
parents 3675021fa6e5
children 363024b76da7
files .hgignore GNUmakefile libmlk-adventure/nls/fr.po libmlk-adventure/nls/libmlk-adventure.pot libmlk-core/nls/fr.po libmlk-core/nls/libmlk-core.pot libmlk-rpg/nls/fr.po libmlk-rpg/nls/libmlk-rpg.pot libmlk-ui/nls/fr.po libmlk-ui/nls/libmlk-ui.pot
diffstat 10 files changed, 215 insertions(+), 108 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Sun Jun 27 17:07:37 2021 +0200
+++ b/.hgignore	Mon Jun 28 21:08:11 2021 +0200
@@ -2,6 +2,7 @@
 \.a$
 \.d$
 \.o$
+\.mo$
 
 # generated files.
 assets/.*\.h$
--- a/GNUmakefile	Sun Jun 27 17:07:37 2021 +0200
+++ b/GNUmakefile	Mon Jun 28 21:08:11 2021 +0200
@@ -20,6 +20,10 @@
 CFLAGS=                 -O0 -g
 AR=                     ar
 
+MSGFMT=                 msgfmt
+MSGMERGE=               msgmerge
+XGETTEXT=               xgettext
+
 # Don't use absolute paths except for PREFIX.
 PREFIX=                 /usr/local
 BINDIR=                 bin
@@ -67,6 +71,11 @@
 LIBMLK_CORE_OBJS=       ${LIBMLK_CORE_SRCS:.c=.o}
 LIBMLK_CORE_DEPS=       ${LIBMLK_CORE_SRCS:.c=.d}
 
+ifeq (${NLS},1)
+LIBMLK_CORE_PO=         libmlk-core/nls/fr.po
+LIBMLK_CORE_MO=         ${LIBMLK_CORE_PO:.po=.mo}
+endif
+
 LIBMLK_UI=              libmlk-ui/libmlk-ui.a
 LIBMLK_UI_SRCS=         libmlk-ui/ui/align.c \
                         libmlk-ui/ui/button.c \
@@ -82,6 +91,11 @@
 LIBMLK_UI_ASTS=         libmlk-ui/assets/fonts/opensans-light.h \
                         libmlk-ui/assets/fonts/opensans-regular.h
 
+ifeq (${NLS},1)
+LIBMLK_UI_PO=           libmlk-ui/nls/fr.po
+LIBMLK_UI_MO=           ${LIBMLK_UI_PO:.po=.mo}
+endif
+
 LIBMLK_RPG=             libmlk-rpg/libmlk-rpg.a
 LIBMLK_RPG_SRCS=        libmlk-rpg/rpg/battle-bar.c \
                         libmlk-rpg/rpg/battle-entity-state-attacking.c \
@@ -129,6 +143,11 @@
                         libmlk-rpg/assets/sql/property-remove.h \
                         libmlk-rpg/assets/sql/property-set.h
 
+ifeq (${NLS},1)
+LIBMLK_RPG_PO=          libmlk-rpg/nls/fr.po
+LIBMLK_RPG_MO=          ${LIBMLK_RPG_PO:.po=.mo}
+endif
+
 LIBMLK_ADVENTURE=       libmlk-adventure/libmlk-adventure.a
 LIBMLK_ADVENTURE_SRCS=  libmlk-adventure/adventure/action/chest.c \
                         libmlk-adventure/adventure/action/spawner.c \
@@ -151,6 +170,11 @@
 LIBMLK_ADVENTURE_OBJS=  ${LIBMLK_ADVENTURE_SRCS:.c=.o}
 LIBMLK_ADVENTURE_DEPS=  ${LIBMLK_ADVENTURE_SRCS:.c=.d}
 
+ifeq (${NLS},1)
+LIBMLK_ADVENTURE_PO=    libmlk-adventure/nls/fr.po
+LIBMLK_ADVENTURE_MO=    ${LIBMLK_ADVENTURE_PO:.po=.mo}
+endif
+
 # Not a real target, only generated maps and tilesets.
 LIBMLK_DATA_ASTS=       libmlk-data/maps/map-world.map \
                         libmlk-data/maps/tileset-world.tileset
@@ -216,6 +240,13 @@
 
 TARGETS:=               ${LIBRARIES} ${PROGS}
 
+ifeq (${NLS},1)
+POT:=                   libmlk-core-pot \
+                        libmlk-ui-pot \
+                        libmlk-rpg-pot \
+                        libmlk-adventure-pot
+endif
+
 SDL2_INCS:=             $(shell pkg-config --cflags sdl2 SDL2_mixer SDL2_ttf SDL2_image)
 SDL2_LIBS:=             $(shell pkg-config --libs sdl2 SDL2_mixer SDL2_ttf SDL2_image)
 
@@ -283,7 +314,7 @@
 endif
 
 .SUFFIXES:
-.SUFFIXES: .c .o .h .json .map .ogg .png .sql .tileset .ttf
+.SUFFIXES: .c .o .h .json .map .ogg .png .sql .tileset .ttf .mo .po
 
 all: ${TARGETS}
 
@@ -294,6 +325,9 @@
 .c.o:
 	${CMD.cc}
 
+.po.mo:
+	${MSGFMT} -o $@ $<
+
 # Binary files.
 .ttf.h .png.h .ogg.h:
 	${MLK_BCC} -csu $< assets_$(notdir $<) > $@
@@ -320,6 +354,30 @@
 -include ${MLK_MAP_DEPS}
 -include ${MLK_TILESET_DEPS}
 
+#
+# pot(pot, sources, po)
+# ---------------------
+#
+# Regenerate .pot and update .po files.
+#
+define pot
+	${XGETTEXT} -cj -k_ -kN_ -LC -s -o ${1} ${2}
+	for po in ${3}; do \
+		${MSGMERGE} --backup=off -qU $$po ${1}; \
+	done
+endef
+
+#
+# pot-install(name, mo, destdir)
+#
+define pot-install
+	for mo in ${2}; do \
+		mkdir -p ${3}${LOCALEDIR}/$$(basename $${mo%.mo})/LC_MESSAGES; \
+		cp $$mo ${3}${LOCALEDIR}/$$(basename $${mo%.mo})/LC_MESSAGES/${1}.mo; \
+	done
+endef
+
+
 # {{{ libmlk-sqlite
 
 ${LIBMLK_SQLITE}: ${LIBMLK_SQLITE_OBJS}
@@ -331,9 +389,12 @@
 
 ${LIBMLK_CORE_OBJS}: config.h
 
-${LIBMLK_CORE}: ${LIBMLK_CORE_OBJS}
+${LIBMLK_CORE}: ${LIBMLK_CORE_OBJS} ${LIBMLK_CORE_MO}
 	${CMD.ar}
 
+libmlk-core-pot:
+	$(call pot, libmlk-core/nls/libmlk-core.pot, ${LIBMLK_CORE_SRCS}, ${LIBMLK_CORE_PO})
+
 # }}}
 
 # {{{ libmlk-ui
@@ -341,9 +402,12 @@
 ${LIBMLK_UI_ASTS}: ${MLK_BCC}
 ${LIBMLK_UI_OBJS}: ${LIBMLK_UI_ASTS} ${LIBMLK_CORE}
 
-${LIBMLK_UI}: ${LIBMLK_UI_OBJS}
+${LIBMLK_UI}: ${LIBMLK_UI_OBJS} ${LIBMLK_UI_MO}
 	${CMD.ar}
 
+libmlk-ui-pot:
+	$(call pot, libmlk-ui/nls/libmlk-ui.pot, ${LIBMLK_UI_SRCS}, ${LIBMLK_UI_PO})
+
 # }}}
 
 # {{{ libmlk-rpg
@@ -351,9 +415,12 @@
 ${LIBMLK_RPG_ASTS}: ${MLK_BCC}
 ${LIBMLK_RPG_OBJS}: ${LIBMLK_RPG_ASTS} ${LIBMLK_UI} ${LIBMLK_SQLITE}
 
-${LIBMLK_RPG}: ${LIBMLK_RPG_OBJS}
+${LIBMLK_RPG}: ${LIBMLK_RPG_OBJS} ${LIBMLK_RPG_MO}
 	${CMD.ar}
 
+libmlk-rpg-pot:
+	$(call pot, libmlk-rpg/nls/libmlk-rpg.pot, ${LIBMLK_RPG_SRCS}, ${LIBMLK_RPG_PO})
+
 # }}}
 
 # {{{ libmlk-adventure
@@ -361,9 +428,12 @@
 ${LIBMLK_ADVENTURE_ASTS}: ${MLK_BCC}
 ${LIBMLK_ADVENTURE_OBJS}: ${LIBMLK_ADVENTURE_ASTS} ${LIBMLK_RPG}
 
-${LIBMLK_ADVENTURE}: ${LIBMLK_ADVENTURE_OBJS}
+${LIBMLK_ADVENTURE}: ${LIBMLK_ADVENTURE_OBJS} ${LIBMLK_ADVENTURE_MO}
 	${CMD.ar}
 
+libmlk-adventure-pot:
+	$(call pot, libmlk-adventure/nls/libmlk-adventure.pot, ${LIBMLK_ADVENTURE_SRCS}, ${LIBMLK_ADVENTURE_PO})
+
 # }}}
 
 # {{{ libmlk-data
@@ -427,6 +497,7 @@
 # {{{ clean
 
 clean:
+	rm -rf fakeroot
 	rm -f config.h tags
 	rm -f ${LIBMLK_ADVENTURE} ${LIBMLK_ADVENTURE_OBJS} ${LIBMLK_ADVENTURE_DEPS}
 	rm -f ${LIBMLK_CORE} ${LIBMLK_CORE_OBJS} ${LIBMLK_CORE_DEPS}
@@ -446,11 +517,15 @@
 
 fakeroot:
 	mkdir -p fakeroot
-	mkdir -p fakeroot/bin
-	mkdir -p fakeroot/share/mlk-adventure
-	cp ${PROGS} fakeroot/bin
-	for e in ${EXAMPLES}; do cp $$e fakeroot/bin/$$(basename $$(dirname $$e)); done
-	rsync -a libmlk-data/ fakeroot/share/mlk-adventure
+	mkdir -p fakeroot/${BINDIR}
+	mkdir -p fakeroot/${DATADIR}/mlk-adventure
+	cp ${PROGS} fakeroot/${BINDIR}
+	for e in ${EXAMPLES}; do cp $$e fakeroot/${BINDIR}/$$(basename $$(dirname $$e)); done
+	rsync -a libmlk-data/ fakeroot/${DATADIR}/mlk-adventure
+	$(call pot-install,libmlk-core,${LIBMLK_CORE_MO},fakeroot/)
+	$(call pot-install,libmlk-ui,${LIBMLK_UI_MO},fakeroot/)
+	$(call pot-install,libmlk-rpg,${LIBMLK_RPG_MO},fakeroot/)
+	$(call pot-install,libmlk-adventure,${LIBMLK_ADVENTURE_MO},fakeroot/)
 
 # }}}
 
@@ -460,6 +535,8 @@
 
 everything: ${TARGETS} ${TESTS} ${EXAMPLES}
 
+pot: ${POT}
+
 # }}}
 
-.PHONY: all clean examples everything fakeroot tests tools
+.PHONY: all clean examples everything fakeroot nls pot tests tools
--- a/libmlk-adventure/nls/fr.po	Sun Jun 27 17:07:37 2021 +0200
+++ b/libmlk-adventure/nls/fr.po	Mon Jun 28 21:08:11 2021 +0200
@@ -20,7 +20,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-22 10:59+0100\n"
+"POT-Creation-Date: 2021-06-28 21:06+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -29,32 +29,48 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/state/mainmenu.c:107
+#: libmlk-adventure/adventure/spell/fire-minor.c:123
+msgid "A small amount of fire balls"
+msgstr ""
+
+#: libmlk-adventure/adventure/character/black-cat.c:44
+msgid "Black Cat"
+msgstr ""
+
+#: libmlk-adventure/adventure/state/mainmenu.c:119
 msgid "Continue"
 msgstr "Continuer"
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/dialog/save.c:162
+#: libmlk-adventure/adventure/spell/fire-minor.c:122
+msgid "Fire Minor"
+msgstr ""
+
+#: libmlk-adventure/adventure/dialog/save.c:160
 #, c-format
 msgid "Last played: %s"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/state/mainmenu.c:106
+#: libmlk-adventure/adventure/character/neth.c:41
+msgid "Neth"
+msgstr ""
+
+#: libmlk-adventure/adventure/state/mainmenu.c:118
 msgid "New"
 msgstr "Nouvelle partie"
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/item/potion.c:36
+#: libmlk-adventure/adventure/item/potion.c:57
 msgid "Potion"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/state/mainmenu.c:108
+#: libmlk-adventure/adventure/state/mainmenu.c:120
 msgid "Quit"
 msgstr "Quitter"
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/item/potion.c:37
+#: libmlk-adventure/adventure/item/potion.c:58
 msgid "Recover 50 HP."
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/dialog/save.c:168
+#: libmlk-adventure/adventure/dialog/save.c:166
 #, c-format
 msgid "Time played: %s"
 msgstr ""
--- a/libmlk-adventure/nls/libmlk-adventure.pot	Sun Jun 27 17:07:37 2021 +0200
+++ b/libmlk-adventure/nls/libmlk-adventure.pot	Mon Jun 28 21:08:11 2021 +0200
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-22 10:59+0100\n"
+"POT-Creation-Date: 2021-06-28 21:06+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,32 +17,48 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/state/mainmenu.c:107
+#: libmlk-adventure/adventure/spell/fire-minor.c:123
+msgid "A small amount of fire balls"
+msgstr ""
+
+#: libmlk-adventure/adventure/character/black-cat.c:44
+msgid "Black Cat"
+msgstr ""
+
+#: libmlk-adventure/adventure/state/mainmenu.c:119
 msgid "Continue"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/dialog/save.c:162
+#: libmlk-adventure/adventure/spell/fire-minor.c:122
+msgid "Fire Minor"
+msgstr ""
+
+#: libmlk-adventure/adventure/dialog/save.c:160
 #, c-format
 msgid "Last played: %s"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/state/mainmenu.c:106
+#: libmlk-adventure/adventure/character/neth.c:41
+msgid "Neth"
+msgstr ""
+
+#: libmlk-adventure/adventure/state/mainmenu.c:118
 msgid "New"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/item/potion.c:36
+#: libmlk-adventure/adventure/item/potion.c:57
 msgid "Potion"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/state/mainmenu.c:108
+#: libmlk-adventure/adventure/state/mainmenu.c:120
 msgid "Quit"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/item/potion.c:37
+#: libmlk-adventure/adventure/item/potion.c:58
 msgid "Recover 50 HP."
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-adventure/adventure/dialog/save.c:168
+#: libmlk-adventure/adventure/dialog/save.c:166
 #, c-format
 msgid "Time played: %s"
 msgstr ""
--- a/libmlk-core/nls/fr.po	Sun Jun 27 17:07:37 2021 +0200
+++ b/libmlk-core/nls/fr.po	Mon Jun 28 21:08:11 2021 +0200
@@ -15,13 +15,12 @@
 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #
-
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-20 10:24+0100\n"
+"POT-Creation-Date: 2021-06-27 19:14+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,12 +29,12 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: /Users/markand/Dev/molko/libmlk-core/core/panic.c:30
+#: libmlk-core/core/panic.c:30
 #, c-format
 msgid "abort: %s\n"
 msgstr "fatal: %s\n"
 
-#: /Users/markand/Dev/molko/libmlk-core/core/panic.c:76
+#: libmlk-core/core/panic.c:76
 #, c-format
 msgid "abort: panic handler returned\n"
 msgstr "fatal: la fonction de panique n'aurait pas du continuer\n"
--- a/libmlk-core/nls/libmlk-core.pot	Sun Jun 27 17:07:37 2021 +0200
+++ b/libmlk-core/nls/libmlk-core.pot	Mon Jun 28 21:08:11 2021 +0200
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-20 13:12+0100\n"
+"POT-Creation-Date: 2021-06-28 21:06+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,12 +17,12 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: /Users/markand/Dev/molko/libmlk-core/core/panic.c:30
+#: libmlk-core/core/panic.c:30
 #, c-format
 msgid "abort: %s\n"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-core/core/panic.c:76
+#: libmlk-core/core/panic.c:76
 #, c-format
 msgid "abort: panic handler returned\n"
 msgstr ""
--- a/libmlk-rpg/nls/fr.po	Sun Jun 27 17:07:37 2021 +0200
+++ b/libmlk-rpg/nls/fr.po	Mon Jun 28 21:08:11 2021 +0200
@@ -15,13 +15,12 @@
 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #
-
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-20 10:24+0100\n"
+"POT-Creation-Date: 2021-06-28 21:06+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,127 +29,127 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-bar.c:127
+#: libmlk-rpg/rpg/battle-bar.c:143
 msgid "Attack"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-bar.c:134
+#: libmlk-rpg/rpg/battle-bar.c:150
 msgid "Magic"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-bar.c:141
+#: libmlk-rpg/rpg/battle-bar.c:157
 msgid "Objects"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-bar.c:148
+#: libmlk-rpg/rpg/battle-bar.c:164
 msgid "Special"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-state-victory.c:86
+#: libmlk-rpg/rpg/battle-state-victory.c:86
 msgid "Victory!"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-state-lost.c:85
+#: libmlk-rpg/rpg/battle-state-lost.c:85
 msgid "You have been defeated..."
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:240
+#: libmlk-rpg/rpg/tileset-file.c:241
 msgid "could not parse image"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:148
+#: libmlk-rpg/rpg/map-file.c:149
 msgid "could not parse tileset"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/save.c:80
+#: libmlk-rpg/rpg/save.c:78
 msgid "database not initialized correctly"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:90
+#: libmlk-rpg/rpg/map-file.c:91
 #, c-format
 msgid "ignoring action %d,%d,%u,%u,%d,%s"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:59
+#: libmlk-rpg/rpg/map-file.c:60
 #, c-format
 msgid "invalid layer type: %s"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:193
+#: libmlk-rpg/rpg/map-file.c:194
 msgid "invalid origin"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/message.c:277
+#: libmlk-rpg/rpg/message.c:277
 msgid "message has null dimensions"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/message.c:140
+#: libmlk-rpg/rpg/message.c:140
 #, c-format
 msgid "message height too small: %u < %u"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/message.c:171
+#: libmlk-rpg/rpg/message.c:171
 msgid "message is automatic but has zero timeout"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/message.c:138
+#: libmlk-rpg/rpg/message.c:138
 #, c-format
 msgid "message width too small: %u < %u"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:254
+#: libmlk-rpg/rpg/map-file.c:255
 msgid "missing background layer"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:256
+#: libmlk-rpg/rpg/map-file.c:257
 msgid "missing foreground layer"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:132
+#: libmlk-rpg/rpg/map-file.c:133
 msgid "missing layer type definition"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:128
+#: libmlk-rpg/rpg/map-file.c:129
 msgid "missing map dimensions before layer"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:238
+#: libmlk-rpg/rpg/tileset-file.c:239
 msgid "missing tile dimensions before image"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:258
+#: libmlk-rpg/rpg/map-file.c:259
 msgid "missing tileset"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:297
+#: libmlk-rpg/rpg/tileset-file.c:298
 msgid "missing tileset image"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:247
+#: libmlk-rpg/rpg/map-file.c:248
 msgid "missing title"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:175
+#: libmlk-rpg/rpg/map-file.c:176
 msgid "null map columns"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:184
+#: libmlk-rpg/rpg/map-file.c:185
 msgid "null map rows"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:164
+#: libmlk-rpg/rpg/map-file.c:165
 msgid "null map title"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/save.c:265
+#: libmlk-rpg/rpg/save.c:263
 #, c-format
 msgid "property '%s' was not found"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:141
+#: libmlk-rpg/rpg/tileset-file.c:142
 msgid "tileheight is null"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:132
+#: libmlk-rpg/rpg/tileset-file.c:133
 msgid "tilewidth is null"
 msgstr ""
--- a/libmlk-rpg/nls/libmlk-rpg.pot	Sun Jun 27 17:07:37 2021 +0200
+++ b/libmlk-rpg/nls/libmlk-rpg.pot	Mon Jun 28 21:08:11 2021 +0200
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-12-22 10:58+0100\n"
+"POT-Creation-Date: 2021-06-28 21:06+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,127 +17,127 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-bar.c:127
+#: libmlk-rpg/rpg/battle-bar.c:143
 msgid "Attack"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-bar.c:134
+#: libmlk-rpg/rpg/battle-bar.c:150
 msgid "Magic"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-bar.c:141
+#: libmlk-rpg/rpg/battle-bar.c:157
 msgid "Objects"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-bar.c:148
+#: libmlk-rpg/rpg/battle-bar.c:164
 msgid "Special"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-state-victory.c:86
+#: libmlk-rpg/rpg/battle-state-victory.c:86
 msgid "Victory!"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/battle-state-lost.c:85
+#: libmlk-rpg/rpg/battle-state-lost.c:85
 msgid "You have been defeated..."
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:240
+#: libmlk-rpg/rpg/tileset-file.c:241
 msgid "could not parse image"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:148
+#: libmlk-rpg/rpg/map-file.c:149
 msgid "could not parse tileset"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/save.c:80
+#: libmlk-rpg/rpg/save.c:78
 msgid "database not initialized correctly"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:90
+#: libmlk-rpg/rpg/map-file.c:91
 #, c-format
 msgid "ignoring action %d,%d,%u,%u,%d,%s"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:59
+#: libmlk-rpg/rpg/map-file.c:60
 #, c-format
 msgid "invalid layer type: %s"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:193
+#: libmlk-rpg/rpg/map-file.c:194
 msgid "invalid origin"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/message.c:277
+#: libmlk-rpg/rpg/message.c:277
 msgid "message has null dimensions"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/message.c:140
+#: libmlk-rpg/rpg/message.c:140
 #, c-format
 msgid "message height too small: %u < %u"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/message.c:171
+#: libmlk-rpg/rpg/message.c:171
 msgid "message is automatic but has zero timeout"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/message.c:138
+#: libmlk-rpg/rpg/message.c:138
 #, c-format
 msgid "message width too small: %u < %u"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:254
+#: libmlk-rpg/rpg/map-file.c:255
 msgid "missing background layer"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:256
+#: libmlk-rpg/rpg/map-file.c:257
 msgid "missing foreground layer"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:132
+#: libmlk-rpg/rpg/map-file.c:133
 msgid "missing layer type definition"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:128
+#: libmlk-rpg/rpg/map-file.c:129
 msgid "missing map dimensions before layer"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:238
+#: libmlk-rpg/rpg/tileset-file.c:239
 msgid "missing tile dimensions before image"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:258
+#: libmlk-rpg/rpg/map-file.c:259
 msgid "missing tileset"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:297
+#: libmlk-rpg/rpg/tileset-file.c:298
 msgid "missing tileset image"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:247
+#: libmlk-rpg/rpg/map-file.c:248
 msgid "missing title"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:175
+#: libmlk-rpg/rpg/map-file.c:176
 msgid "null map columns"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:184
+#: libmlk-rpg/rpg/map-file.c:185
 msgid "null map rows"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/map-file.c:164
+#: libmlk-rpg/rpg/map-file.c:165
 msgid "null map title"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/save.c:265
+#: libmlk-rpg/rpg/save.c:263
 #, c-format
 msgid "property '%s' was not found"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:141
+#: libmlk-rpg/rpg/tileset-file.c:142
 msgid "tileheight is null"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-rpg/rpg/tileset-file.c:132
+#: libmlk-rpg/rpg/tileset-file.c:133
 msgid "tilewidth is null"
 msgstr ""
--- a/libmlk-ui/nls/fr.po	Sun Jun 27 17:07:37 2021 +0200
+++ b/libmlk-ui/nls/fr.po	Mon Jun 28 21:08:11 2021 +0200
@@ -15,13 +15,12 @@
 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #
-
 #, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 17:33+0100\n"
+"POT-Creation-Date: 2021-06-28 21:04+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,22 +29,22 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: /Users/markand/Dev/molko/libui/ui/button.c:75
+#: libmlk-ui/ui/button.c:75
 #, c-format
 msgid "button height is too small for text: %u < %u"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libui/ui/button.c:73
+#: libmlk-ui/ui/button.c:73
 #, c-format
 msgid "button width is too small for text: %u < %u"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libui/ui/gridmenu.c:86
+#: libmlk-ui/ui/gridmenu.c:86
 #, c-format
 msgid "gridmenu height is too small: %u < %u"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libui/ui/gridmenu.c:78
+#: libmlk-ui/ui/gridmenu.c:78
 #, c-format
 msgid "gridmenu width is too small: %u < %u"
 msgstr ""
--- a/libmlk-ui/nls/libmlk-ui.pot	Sun Jun 27 17:07:37 2021 +0200
+++ b/libmlk-ui/nls/libmlk-ui.pot	Mon Jun 28 21:08:11 2021 +0200
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 22:34+0100\n"
+"POT-Creation-Date: 2021-06-28 21:06+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,22 +17,22 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: /Users/markand/Dev/molko/libmlk-ui/ui/button.c:75
+#: libmlk-ui/ui/button.c:75
 #, c-format
 msgid "button height is too small for text: %u < %u"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-ui/ui/button.c:73
+#: libmlk-ui/ui/button.c:73
 #, c-format
 msgid "button width is too small for text: %u < %u"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-ui/ui/gridmenu.c:86
+#: libmlk-ui/ui/gridmenu.c:86
 #, c-format
 msgid "gridmenu height is too small: %u < %u"
 msgstr ""
 
-#: /Users/markand/Dev/molko/libmlk-ui/ui/gridmenu.c:78
+#: libmlk-ui/ui/gridmenu.c:78
 #, c-format
 msgid "gridmenu width is too small: %u < %u"
 msgstr ""