One option is to load your document at the beginning with different
setups where you only process the language information.
Another option is to put the language dependent options in a setups
block and load them when you process the XML file.
\startbuffer[test]
test
\stopbuffer
\startxmlsetups [xml:testsetups]
\xmlsetsetup{\xmldocument}{document}{xml:*}
\stopxmlsetups
\xmlregistersetup{xml:testsetups}
\startxmlsetups [xml:document]
\mainlanguage[\xmlatt{#1}{language}]
\startdocument
\xmlflush{#1}
\stopdocument
\stopxmlsetups
% The “document:start” setup is used by default with
% the before key of the \startdocument command
\startsetups [document:start]
\startmodeset
[**de] {This document is in german.\par}
[**en] {This document is in english.\par}
[default] {This document uses the default language.\par}
\stopmodeset
\stopsetups
\starttext
\xmlprocessbuffer{main}{test}{}
\stoptext
Wolfgang
> Thomas A. Schmitz
> 17. Juni 2018 um 19:52
> Hi,
>
> I have a conceptual problem integrating btx into my xml workflow.
> There are too many files involved, so no minimal example, but a
> minimal description. Root of my xml document:
>
>
> ...
>
>
> I have two files with btx definitions:
>
> publ-imp-deutsch.mkvi
>
> publ-imp-english.mkvi
>
> Loading one of these two should depend on the main language:
>
> \doifelse {\currentlanguage} {en}
> {\usebtxdefinitions [english]}
> {\usebtxdefinitions [deutsch]}
>
> My problem: the main language is set within the processing rules for
> the root of my xml document:
>
> \startxmlsetups xml:document
> \mainlanguage[\xmlatt{#1}{language}]
> \stopxmlsetups
>
> However, this implies a \starttext. And the btxdefinitions need to be
> loaded before \starttext, or so it seems. Which means: the processing
> rules for \usebtxdefinitions need to be set outside of the xml setups.
> But at this moment, the main language is not set yet, and the
> \doifelse fails. Any hints how to get out of this conundrum?
>
> Thanks, and all best
>
> Thomas
> ___________________________________________________________________________________
>
> If your question is of interest to others as well, please add an entry
> to the Wiki!
>
> maillist : ntg-context@ntg.nl /
> http://www.ntg.nl/mailman/listinfo/ntg-context
> webpage : http://www.pragma-ade.nl / http://context.aanhet.net
> archive : https://bitbucket.org/phg/context-mirror/commits/
> wiki : http://contextgarden.net
> ___________________________________________________________________________________
> Pablo Rodriguez
> 17. Juni 2018 um 21:37
>
> Hi Thomas,
>
> this may work in your case:
>
> \startxmlsetups xml:document
> \mainlanguage[\xmlatt{#1}{language}]
> \doifmodeelse{**en}
> {\usebtxdefinitions [english]}
> {\usebtxdefinitions [deutsch]}
> \stopxmlsetups
>
> I have just checked in with another document and it worked as expected.
>
> Of course, "\doifelse{\currentmainlanguage}{en}" also works fine for me.
>
> I hope it helps,
>
> Pablo
> Thomas A. Schmitz
> 17. Juni 2018 um 22:10
>
>
> Thank you for your suggestion, Pablo, but this is just a slightly
> different syntax to express the same test, this doesn't change
> anything. Maybe this document is clearer in explaining my problem (and
> results are identical with the \doifmodeelse syntax):
>
> \startbuffer[test]
>
> test
>
> \stopbuffer
>
> \startxmlsetups xml:testsetups
> \xmlsetsetup{\xmldocument}{document}{xml:*}
> \stopxmlsetups
>
> \xmlregistersetup{xml:testsetups}
>
> \startxmlsetups xml:document
> \mainlanguage[\xmlatt{#1}{language}]
> Language settings work correctly here:
>
> \doifelse {\currentmainlanguage} {de}
> {\color [blue] {Deutsch}}
> {\color [red] {English}}\par
> \xmlflush{#1}
> \stopxmlsetups
>
> \starttext
> This is where the btx set has to be loaded, and language settings do
> not work as needed:
>
> \doifelse {\currentmainlanguage} {de}
> {\color [blue] {Deutsch}}
> {\color [red] {English}}\par
>
> \xmlprocessbuffer{main}{test}{}
>
> \stoptext
>
> Is there any way to set the language before the element is
> processed? I experimented with this
>
> \startxmlsetups xml:language:initiate
> \mainlanguage[\xmlattribute{\xmldocument}{root::/document}{language}]
> \stopxmlsetups
>
> \xmlbeforedocumentsetup{\xmldocument}{xml:language:initiate}{xml:testsetups}
>
>
> but this doesn't work, and I'm not sure I'm using it the right way.
>
> All best
>
> Thomas
> ___________________________________________________________________________________
>
> If your question is of interest to others as well, please add an entry
> to the Wiki!
>
> maillist : ntg-context@ntg.nl /
> http://www.ntg.nl/mailman/listinfo/ntg-context
> webpage : http://www.pragma-ade.nl / http://context.aanhet.net
> archive : https://bitbucket.org/phg/context-mirror/commits/
> wiki : http://contextgarden.net
> ___________________________________________________________________________________