One of the easy things to setup in tt_news with multiple languages is the ability to create articles in a language other than the sites default without the need for a default language version. The problem comes when you later need a default translation. Here's how you can enable an editable TCA field for just such a problem.
I have an extension at work for TCA changes. The changes I made shows an editable field in the tt_news TCA form allowing a BE user to specify a news article ID as this records default translation.
Here is the code from my TCA extension that changes tt_news:
if(t3lib_extMgm::isLoaded('tt_news')) {
t3lib_div::loadTCA("tt_news");
// Remove the field from the palette
$TCA['tt_news']['palettes']['2']['showitem'] = str_replace(',l18n_parent', '', $TCA['tt_news']['palettes']['2']['showitem']);
// Add l18n_parent to types on it's own tab with localisation and to showRecordFieldList;
$TCA['tt_news']['types']['0']['showitem'] = str_replace('Relations,', 'Relations,l18n_parent,', $TCA['tt_news']['types']['0']['showitem']);
$TCA['tt_news']['interface']['showRecordFieldList'] .= ',l18n_parent';
$newConfig = array (
'type' => 'input',
'size' => '5',
'max' => '5',
'eval' => 'trim,int'
);
// Remove the old config and add the new one
unset($TCA['tt_news']['columns']['l18n_parent']['config']);
$TCA['tt_news']['columns']['l18n_parent']['config'] = $newConfig;
}
So what does it do?
if(t3lib_extMgm::isLoaded('tt_news')) {
This if checks if tt_news is actually loaded - no point doing anything more if it isn't.
$TCA['tt_news']['palettes']['2']['showitem'] = str_replace(',l18n_parent', '', $TCA['tt_news']['palettes']['2']['showitem']);
The l18n_parent field is then removed from it's 'secondary options' palette and then added to the 'Relations' tab as an input field that just accepts ints:
$TCA['tt_news']['types']['0']['showitem'] = str_replace('Relations,', 'Relations,l18n_parent,', $TCA['tt_news']['types']['0']['showitem']);
$TCA['tt_news']['interface']['showRecordFieldList'] .= ',l18n_parent';
...
unset($TCA['tt_news']['columns']['l18n_parent']['config']);
$TCA['tt_news']['columns']['l18n_parent']['config'] = $newConfig;
That's it! Whenever you are on a translated record this field will show up (whether there is a default translation or not - good for changing the default translation too). You can then enter the UID of the tt_news record that should be the articles default translation. The field is still an exclude field so you can use TYPO3's backend groups to control who actually sees this field.
Originally I made this a select field so that you could choose from a list of articles, but when you have many articles this is not a good solution, so I decided on a int-only text field. You could of course change it to a user field and add ajax auto-suggested article titles that narrow down the list of article titles shown as a user types them in or what ever else you can think of.
NB: this has not been tested with tt_news 3.0 or TYPO3 4.3.