]> git.plutz.net Git - shellwiki/blob - handlers/10_translations.sh
make cache files language specific
[shellwiki] / handlers / 10_translations.sh
1 #!/bin/sh
2
3 # Set LANGUAGE_DEFAULT to enable Plugin
4 [ ! "$LANGUAGE_DEFAULT" ] && return 1
5
6 export LANGUAGE_DEFAULT="${LANGUAGE_DEFAULT:-en}"
7 export HTTP_REFERER="${HTTP_REFERER:-$(HEADER Referer)}"
8 export LANGUAGE=''
9
10 mdfile(){
11   # Override mdfile Selection from tools.sh
12   local page="$(PATH "$1")"
13   page="${page%/}"
14
15   # Additional part:
16   #   if PAGE Address is LANGUAGE Page, jump to regular processing
17   #   else if LANGUAGE Page exists, add language tag
18   # Also the reason why `mdfile` should not be used in `acl.sh`
19   if   [ "${page%/:${LANGUAGE}}" != "$page" ]; then
20     :
21   elif [ -f "$_DATA/pages/$page/:$LANGUAGE/#page.md"  ]; then
22     printf %s\\n "$_DATA/pages/$page/:$LANGUAGE/#page.md"
23     return 0
24   elif [ -f "$_EXEC/pages/$page/:$LANGUAGE/#page.md"  ]; then
25     printf %s\\n "$_EXEC/pages/$page/:$LANGUAGE/#page.md"
26     return 0
27   fi 2>&-
28
29   # Regular processing, keep in sync with tools.sh
30   if   [ -f "$_DATA/pages/$page/#page.md" ]; then
31     printf %s\\n "$_DATA/pages/$page/#page.md"
32     return 0
33   elif [ -f "$_EXEC/pages/$page/#page.md" ]; then
34     printf %s\\n "$_EXEC/pages/$page/#page.md"
35     return 0
36   else
37     return 1
38   fi 2>&-
39   #  ^^ suppress error messages produced
40   #     by printf when stdout was closed
41 }
42
43 case ${HTTP_REFERER} in
44   */:*/*):;;
45   */:*)
46    LANGUAGE_REFERRED="${HTTP_REFERER##*/:}"
47    ;;
48 esac
49
50 LANGUAGE="${LANGUAGE_REFERRED:-${LANGUAGE_DEFAULT}}"
51
52 case ${PATH_INFO} in
53   */:?*/\[attachment\]/?*)
54     LANGUAGE="${PATH_INFO#*/:}"
55     LANGUAGE="${LANGUAGE%%/*}"
56     PATH_INFO="${PATH_INFO%%:?*/*}${PATH_INFO#*/:?*/}"
57     ;;
58   */:?*/\[attachment\])
59     LANGUAGE="${PATH_INFO#*/:}"
60     LANGUAGE="${LANGUAGE%%/*}"
61     PATH_INFO="${PATH_INFO%:?*/\[attachment\]}[attachment]"
62     ;;
63   */:?*/\[*\])
64     :;;  # Default handler, considered valid in most cases
65   */:?*/?*)
66     :;;  # Default attachment handler
67   */:?*/)   # Faulty URL build
68     REDIRECT "${_BASE}${PATH_INFO%/}"
69     ;;
70 # */:"${LANGUAGE_DEFAULT}")
71 #   REDIRECT "${_BASE}${PATH_INFO%:*}"
72 #   ;;
73   */:?*)
74     LANGUAGE="${PATH_INFO##*/:}"
75
76     if mdfile "${PATH_INFO}/"; then
77       # Pretend to deliver Language Page, if Language Tag is valid
78       PATH_INFO="${PATH_INFO}/"
79     elif [ "$LANGUAGE" = "$LANGUAGE_DEFAULT" ]; then
80       # Pretend Language Tag was omitted for default Language
81       PATH_INFO="${PATH_INFO%:*}"
82     else
83       # Deliver default Page if Language is not found
84       ERROR_MSG="TRANSLATION NOT FOUND"
85       PATH_INFO="${PATH_INFO%:*}"
86     fi
87     ;;
88   /|*/*/)  # Keep Language from Referer
89     if [ "$LANGUAGE_REFERRED" -a "$LANGUAGE_REFERRED" != "$LANGUAGE_DEFAULT" ]; then
90       REDIRECT "${_BASE}${PATH_INFO}:${LANGUAGE_REFERRED}"
91     fi
92     ;;
93   */\[*\])  # Keep Language from Referer
94     if [ "$LANGUAGE_REFERRED" -a "$LANGUAGE_REFERRED" != "$LANGUAGE_DEFAULT" ]; then
95       REDIRECT "${_BASE}${PATH_INFO%\[*\]}:${LANGUAGE_REFERRED}/[${PATH_INFO##*/\[}"
96     fi
97     ;;
98 esac
99
100 return 1