i18n.sh

Summary

Maintainability
Test Coverage
#!/bin/bash
# Usage:
#     Initial catalog creation (lang is the language identifier):
#         ./i18n.sh lang
#     Updating translation and compile catalog:
#         ./i18n.sh

# configuration
DOMAIN="Kotti"
SEARCH_PATH="kotti"
LOCALES_PATH="kotti/locale"
# end configuration

# create locales folder if not exists
if [ ! -d "$LOCALES_PATH" ]; then
    echo "Locales directory not exists, create"
    mkdir -p "$LOCALES_PATH"
fi

# create pot if not exists
if [ ! -f "$LOCALES_PATH"/$DOMAIN.pot ]; then
    echo "Create pot file"
    touch "$LOCALES_PATH"/$DOMAIN.pot
fi

# no arguments, extract and update
if [ $# -eq 0 ]; then
    echo "Extract messages"
    pot-create "$SEARCH_PATH" -d $DOMAIN -o "$LOCALES_PATH"/$DOMAIN.pot

    echo "Update translations"
    for po in "$LOCALES_PATH"/*/LC_MESSAGES/$DOMAIN.po; do
        msgmerge --no-wrap -o "$po" "$po" "$LOCALES_PATH"/$DOMAIN.pot
    done

    echo "Compile message catalogs"
    for po in "$LOCALES_PATH"/*/LC_MESSAGES/*.po; do
        echo "Compiling file $po..."
        msgfmt --statistics -o "${po%.*}.mo" "$po"
    done

# first argument represents language identifier, create catalog
else
    cd "$LOCALES_PATH"
    mkdir -p $1/LC_MESSAGES
    msginit -i $DOMAIN.pot -o $1/LC_MESSAGES/$DOMAIN.po -l $1
fi