#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: dyn-po4a > po/po4a.cfg dyn-po4a -h EOF } help() { cat <<-'EOF' Options: -h, --help show this message Discover translatable files in the repository (via git-ls-files(1)) that have '.en.' or '/en/' in their name and emit the configuration file to be used with po4a(1). Examples: Setup i18n on a new repository: $ mkdir po $ touch po/pt.po $ touch po/"$(basename "$PWD")".pot $ dyn-po4a > po/po4a.cfg $ po4a po/po4a.cfg Conditionally update the configuration in a Makefile: po/po4a.cfg: ALWAYS dyn-po4a | ifnew $@ po4a $@ EOF } for flag in "$@"; do case "$flag" in --) break ;; --help) usage help exit ;; *) ;; esac done while getopts 'h' flag; do case "$flag" in h) usage help exit ;; *) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) . src/lib.sh guess_type() { case "$1" in *.md) echo text ;; *.[1-9]*.in) echo man ;; *.html) echo xhtml ;; *) echo text ;; esac } cat <<-'EOF' [options] --keep 0 --master-charset UTF-8 --localized-charset UTF-8 [po_directory] po EOF git ls-files | grep -F '.en.' | while read -r file; do TYPE="$(guess_type "$file")" # shellcheck disable=2016 VAR_FILE="$(printf '%s' "$file" | sed 's|\.en\.|.$lang.|')" # shellcheck disable=2016 printf '[type: %s] %s $lang:%s\n' "$TYPE" "$file" "$VAR_FILE" done if [ ! -t 0 ]; then cat fi