aboutsummaryrefslogblamecommitdiff
path: root/scripts/missing-translations.sh
blob: 699c6dd212ea8c71bd0c6cf21e756b7e661bee64 (plain) (tree)




























































                                                                                                               
#!/usr/bin/env bash
set -Eeuo pipefail

end="\033[0m"
red="\033[0;31m"
red() { echo -e "${red}${1}${end}"; }

JSON="${1:-}"
[[ -z "${JSON}" ]] && {
  red 'Missing input JSON file.'
  cat <<EOF
Usage:
    $0 <SITE_JSON_PATH>

      Arguments
        SITE_JSON_PATH     Path to the site.json file which contains data and metadata about pages of the site.

Examples:
    $0 _site/site.json
    $0 result/site.json
    $0 \$(nix-build -A subtasks.docs)/site.json
EOF
  exit 2
}

get-ref() {
  echo "${1}"  | base64 --decode | jq -r .ref
}

get-lang() {
  echo "${1}" | base64 --decode | jq -r .lang
}

declare -A IDENTS
declare -A ALL_REFS
accumulate-translation-identifiers() {
  SELECTOR="${1}"
  for page in $(jq -r "${SELECTOR} | @base64" "${JSON}"); do
    REF="$(get-ref "$page")"
    LANG="$(get-lang "$page")"
    if [[ -n "${REF}" ]]; then
      ALL_REFS["${REF}"]=1
      IDENTS["${REF}:${LANG}"]=1
    fi
  done
}

accumulate-translation-identifiers '.posts[]'
accumulate-translation-identifiers '.pages[]'
accumulate-translation-identifiers '.tils[]'

LANGS=(en pt fr)

for ref in "${!ALL_REFS[@]}"; do
  REF="$(cut -d: -f1 <(echo "${ref}"))"
  for lang in "${LANGS[@]}"; do
    if [[ "${IDENTS[${ref}:${lang}]:-}" != 1 ]]; then
       echo "ref '${ref}' is missing language '${lang}'."
    fi
  done
done