# HG changeset patch # User Vladimir Homutov # Date 1348830887 0 # Node ID 095d1972dad9053ddd82badc78df691beaf8b341 # Parent 31ba6a1041867c7ae77365a12b007906e2ad0dc5 Added ability to switch languages without context change. diff -r 31ba6a104186 -r 095d1972dad9 GNUmakefile --- a/GNUmakefile Fri Sep 28 11:04:16 2012 +0000 +++ b/GNUmakefile Fri Sep 28 11:14:47 2012 +0000 @@ -20,11 +20,32 @@ if [ ! -s $(2) ]; then rm $(2); fi; test -s $(2) endef +# List of available languages +LANGS:=$(find xml/ -mindepth 1 -maxdepth 1 -type d -not -name '.svn' \ + -exec basename {} \; | xargs) + +# process xslt and create/pass some variables into XSLT processor: +# +# ORIGIN xml source of processed document ($o in shell script) +# NOLANGORIGIN html document without xml/lang prefix ($ox in shell script) +# TRANS list of languages to which document is translated ($trans) +# +# list of all languages is used to scan thorough to determine if current +# document has translation in each of them. +# define XSLT xmllint --noout --valid $2 xsltproc -o $3 \ $(shell f=`echo $2 | sed 's,^xml/,,;s,[^/]*/,en/,'`; \ - [ -f xml/$$f ] && echo --stringparam ORIGIN "$$f") \ + ox=`echo $2 | sed 's,^xml/,,;s,[^/]*/,,'`; \ + o=`echo $$ox | sed 's,\.xml,\.html,'`; \ + trans=`for LANG in $(LANGS); \ + do \ + [ -f xml/$$LANG/$$ox ] && echo -ne "$$LANG "; \ + done`; \ + [ -f xml/$$f ] && echo --stringparam ORIGIN "$$f"; \ + echo --stringparam NOLANGORIGIN "$$o"; \ + echo --stringparam TRANS \""$$trans\"") \ $(shell p="$4"; [ -n "$$p" ] && \ echo --stringparam $${p%%=*} $${p#*=}) \ $1 $2 diff -r 31ba6a104186 -r 095d1972dad9 xml/menu.xml --- a/xml/menu.xml Fri Sep 28 11:04:16 2012 +0000 +++ b/xml/menu.xml Fri Sep 28 11:14:47 2012 +0000 @@ -9,14 +9,14 @@ - english - русский + english + русский 简体中文 - עברית - 日本語 - türkçe + עברית + 日本語 + türkçe 新闻 @@ -42,13 +42,13 @@ english - русский + русский - 简体中文 - עברית - 日本語 - türkçe + 简体中文 + עברית + 日本語 + türkçe news @@ -85,14 +85,14 @@ - english - русский + english + русский - 简体中文 + 简体中文 עברית - 日本語 - türkçe + 日本語 + türkçe חדשות @@ -115,14 +115,14 @@ - english - русский + english + русский - 简体中文 - עברית + 简体中文 + עברית 日本語 - türkçe + türkçe ニュース @@ -146,14 +146,14 @@ - english + english русский - 简体中文 - עברית - 日本語 - türkçe + 简体中文 + עברית + 日本語 + türkçe новости @@ -179,13 +179,13 @@ - english - русский + english + русский - 简体中文 - עברית - 日本語 + 简体中文 + עברית + 日本語 türkçe diff -r 31ba6a104186 -r 095d1972dad9 xsls/article.xsls --- a/xsls/article.xsls Fri Sep 28 11:04:16 2012 +0000 +++ b/xsls/article.xsls Fri Sep 28 11:14:47 2012 +0000 @@ -13,9 +13,11 @@ -- a current directory of a XSLT script is where the script is stored, -- but not where XSLT processor has been started to run the script --> -X:param XML = "'../xml'"; +X:param XML = "'../xml'"; X:param YEAR; X:param ORIGIN; +X:param NOLANGORIGIN; +X:param TRANS; X:var LINK = "/article/@link | /module/@link"; X:var LANG = "/article/@lang | /module/@lang"; diff -r 31ba6a104186 -r 095d1972dad9 xsls/menu.xsls --- a/xsls/menu.xsls Fri Sep 28 11:04:16 2012 +0000 +++ b/xsls/menu.xsls Fri Sep 28 11:14:47 2012 +0000 @@ -21,25 +21,56 @@ } } else { - - X:attribute "href" { + + + X:if "@switchlang != ''" { - X:if "starts-with(@href, $DIRNAME)" { - X:if "substring-after(@href, $DIRNAME) = ''" { - ./ - - } else { - !{ substring-after(@href, $DIRNAME) } - } + + X:if "contains($TRANS, @switchlang)" { + + X:attribute "href" { + X:if "$ROOT != '' " { + !{ concat($ROOT, '/', @switchlang, '/', $NOLANGORIGIN) } + } else { + !{ concat(@switchlang, '/', $NOLANGORIGIN) } + } + } + !{ normalize-space(text()) } + } else { - !{ concat($ROOT, @href) } + !{ normalize-space(text()) } } + } else { + + + X:attribute "href" { + + X:if "starts-with(@href, $DIRNAME)" { + X:if "substring-after(@href, $DIRNAME) = ''" { + ./ + } else { + !{ substring-after(@href, $DIRNAME) } + } + + } else { + + !{ concat($ROOT, @href) } + } + } + !{ normalize-space(text()) } + + + X:if "@lang" { X:text { [} !{@lang} X:text {]}} } - !{ normalize-space(text()) } - - - X:if "@lang" { X:text { [} !{@lang} X:text {]}}
} diff -r 31ba6a104186 -r 095d1972dad9 xsls/style.xsls --- a/xsls/style.xsls Fri Sep 28 11:04:16 2012 +0000 +++ b/xsls/style.xsls Fri Sep 28 11:14:47 2012 +0000 @@ -24,6 +24,8 @@ font-size: 80%; } div#banner { background: #EEEEEE; padding: 10pt 10pt 10pt 0; } + a.notrans { color: gray; + text-decoration:none; } span.initial { font-size: 200%; float: left; padding-right: 10pt;}