I'm pretty sure there's no extra for what you want.
Having only two languages makes it easier. Personally, I would avoid using multiple contexts for this.
I think I would set this up with the Resource 'content' field your primary language and a Template Variable (TV) for the secondary language. It might be easier to let the users create the posts in NewsPublisher in the front end. That would make it easy to show the two text areas one above the other, leave out fields you don't care about, and let you set the captions for each textarea.
Assuming that the TV is named "secondaryLanguage" -- this is one way to do it:
Create two System Settings with these keys: primary_language, secondary_language and either en or dk for the values.
Create a namespace called multilang with a core path of {core_path}components/multilang/
Create a directory in the core/components/ directory called multilang
Where the content will be displayed on the page, put this in the template:
<div class="content_div">
[[!ShowContent]]
</div>
Then create a snippet called "ShowContent with this code:
/* ShowContent snippet */
$primaryLanguage = $modx->getOption('primary_language');
$secondaryLanguage $modx->getOption('secondary_language');
$lang = $modx->getOption('site_language', $_SESSION, $primaryLanguage, true];
if ($lang == $primaryLanguage) {
$output = '[[*content]]';
$modx->lexicon->load($primaryLanguage . . ':multilang:default');
} else {
$output = '[[*secondaryLangauge']]';
$modx->lexicon->load($secondaryLanguage . ':multilang:default');
}
return $output;
The lexicon->load() line is to load language strings for other parts of the page or template that should be in a particular language. Use language tags for them and create two lexicon files containing the values. The two files would both be called default.inc.php and would be in the en and dk directories under core/components/multilang/lexicon.
core
components
multilang
lexicon
en
default.inc.php
dk
default.inc.php
Your two language selection buttons can input buttons for forms that submit to the current page and contain a hidden input that sets the language. You'll need a snippet at the top of the body section that sets the 'site_language' $_SESSION variable to the value submitted in the form.
$_SESSION['site_language'] = 'en';
or
$_SESSION['site_language'] = 'dk';
If your users log in, you could set a user setting in that snippet with the key 'site_language' and modify the code of the ShowContent snippet to use that if it exists.
If this sounds like too much for you, check out
MigxMultilang (MML). Here are the official docs for it:
https://github.com/Bruno17/migxmultilang. From what I read, MML is very robust. It creates multiple TVs for you (one for each language) and embeds the two-letter language code in the URL. I'm not sure it would handle creating user settings for you, but if users don't log in, they won't work anyway -- and as long as the users come in on the correct URL (e.g., yoursite.com/dk/somepage) the'll get the correct language.